#include <bits/stdc++.h>
using namespace std;
typedef pair<int,int> PII;
const int N=1e6+10;
struct node{
int l,r,cnt;
}tr[N<<5];
inline void read(int &x){
char ch=getchar();int f=1;x=0;
while(!isdigit(ch) && ch^'-') ch=getchar();
if(ch=='-') f=-1,ch=getchar();
while(isdigit(ch)) x=x*10+ch-'0',ch=getchar();
x*=f;
}
void write(int x){
if(x<0)
putchar('-'),x=-x;
if(x>9)
write(x/10);
putchar(x%10+'0');
return;
}
int root[N];
int tot;
int insert(int p,int l,int r,int x,int v){
int q=++tot;
tr[q]=tr[p];
tr[q].cnt+=v;
if(l==r){
return q;
}
int mid=(l+r)>>1;
if(x<=mid){
tr[q].l=insert(tr[q].l,l,mid,x,v);
}else{
tr[q].r=insert(tr[q].r,mid+1,r,x,v);
}
return q;
}
int query(int p,int ll,int rr,int l,int r){
if(ll>=l&&rr<=r){
return tr[p].cnt;
}
int mid=(ll+rr)>>1;
int ans=0;
if(l<=mid)ans+=query(tr[p].l,ll,mid,l,r);
if(r>mid)ans+=query(tr[p].r,mid+1,rr,l,r);
return ans;
}
int main(){
int n,m;
read(n);
unordered_map<int,int>mp;
for(int i=1;i<=n;i++){
int x;
read(x);
root[i]=insert(root[i-1],1,n,i,1);
if(mp.count(x)){
root[i]=insert(root[i],1,n,mp[x],-1);
}
mp[x]=i;
}
read(m);
for(int i=1;i<=m;i++){
int l,r;
read(l);read(r);
write(query(root[r],1,n,l,r));
puts("");
}
}