#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define pb push_back
#define lb lower_bound
#define ub upper_bound
#define fr first
#define sc second
#define memset( a, b ) memset( a, b , sizeof(a) )
#define PI 3.1415926535897932384626
#define mod 1000000007
#define rrep( i , n) for( i=n-1 ; i>=0 ; i--)
#define rep( i , n ) for( i=0 ; i<n; i++ )
#define int_max 1000000000000000000
int t ,d , ct , q, ans ,l , r ,n ,m , mx, mn , i, j, k ,x , y , z , s ;
char ch;
int a[30003] , b[30003] ;
int fre[200003] ;
int blk = 550 ;
struct query{
int i ; int l ; int r ;
};
query Q[200003] ;
bool comp(query a , query b){
if(a.l/blk != b.l/blk ) return a.l/blk < b.l/blk ;
else return a.r <= b.r ;
}
void pluss(int idx){
fre[a[idx]]++ ;
if(fre[a[idx]] == 1) ct++ ;
}
void minuss(int idx){
fre[a[idx]]-- ;
if(fre[a[idx]] == 0) ct-- ;
}
int main(){
cin>>n ;
rep(i ,n) cin>>a[i] ;
cin>>q ;
rep(i ,q){
cin>>x>>y ;
Q[i].i = i , Q[i].l = x -1 , Q[i].r = y -1 ;
}
sort(Q , Q + q , comp) ;
int Start = 0 ,End = -1 ;
rep(i , q){
l = Q[i].l ;
r = Q[i].r ;
while(l < Start) Start-- , pluss(Start) ;
while(End < r) End++ , pluss(End) ;
while(l > Start) minuss(Start) , Start++ ;
while(End > r) minuss(End) , End-- ;
b[Q[i].i] = ct ;
}
rep(i , q) cout<<b[i]<<"\n";
return 0;
}
ICNpbmNsdWRlPGJpdHMvc3RkYysrLmg+CnVzaW5nICBuYW1lc3BhY2Ugc3RkOwojZGVmaW5lICBsbCAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBsb25nCiNkZWZpbmUgIHBiICAgICAgICAgICAgICAgICAgICAgICBwdXNoX2JhY2sKI2RlZmluZSAgbGIgICAgICAgICAgICAgICAgICAgICAgIGxvd2VyX2JvdW5kCiNkZWZpbmUgIHViICAgICAgICAgICAgICAgICAgICAgICB1cHBlcl9ib3VuZAojZGVmaW5lICBmciAgICAgICAgICAgICAgICAgICAgICAgZmlyc3QKI2RlZmluZSAgc2MgICAgICAgICAgICAgICAgICAgICAgIHNlY29uZAojZGVmaW5lICBtZW1zZXQoIGEsIGIgKSAgICAgICAgICAgbWVtc2V0KCBhLCBiICwgc2l6ZW9mKGEpICkKI2RlZmluZSAgUEkgICAgICAgICAgICAgICAgICAgICAgIDMuMTQxNTkyNjUzNTg5NzkzMjM4NDYyNgojZGVmaW5lICBtb2QgICAgICAgICAgICAgICAgICAgICAgICAxMDAwMDAwMDA3CiNkZWZpbmUgIHJyZXAoIGkgLCBuKSAgICAgICAgICAgIGZvciggaT1uLTEgOyBpPj0wIDsgaS0tKQojZGVmaW5lICByZXAoIGkgLCBuICkgICAgICAgICAgICBmb3IoIGk9MCA7IGk8bjsgaSsrICkKI2RlZmluZSAgaW50X21heCAgICAgICAgICAgICAgICAgMTAwMDAwMDAwMDAwMDAwMDAwMAogICAgICAgICAgICAgICAgICAgICAgCgogIGludCB0ICxkICwgY3QgICwgcSwgYW5zICxsICwgciAsbiAsbSAsIG14LCBtbiAsIGksIGosIGsgLHggLCB5ICwgeiAsIHMgIDsKCiBjaGFyIGNoOyAgICAgICAgICAgICAgIAogCiAgICAgaW50IGFbMzAwMDNdICwgYlszMDAwM10gOyAgICAgICAgIAogICBpbnQgZnJlWzIwMDAwM10gOwogIAogIGludCBibGsgPSA1NTAgOwogIApzdHJ1Y3QgcXVlcnl7CiAgICAKICAgIGludCBpIDsgaW50IGwgOyBpbnQgciA7CiAgICAKfTsKCnF1ZXJ5IFFbMjAwMDAzXSA7CgoKYm9vbCBjb21wKHF1ZXJ5IGEgLCBxdWVyeSBiKXsKICAgIAogICAgaWYoYS5sL2JsayAhPSBiLmwvYmxrICkgcmV0dXJuIGEubC9ibGsgPCBiLmwvYmxrIDsKICAgIAogICAgZWxzZSByZXR1cm4gYS5yIDw9IGIuciA7CiAgICAKICAgIAp9CgoKdm9pZCBwbHVzcyhpbnQgaWR4KXsKICAgIAogICBmcmVbYVtpZHhdXSsrIDsgCiAgICBpZihmcmVbYVtpZHhdXSA9PSAxKSBjdCsrIDsKICAgIAp9Cgp2b2lkIG1pbnVzcyhpbnQgaWR4KXsKICAKICAgIGZyZVthW2lkeF1dLS0gOwogICAgaWYoZnJlW2FbaWR4XV0gPT0gMCkgY3QtLSA7CgogICAgCiAgICAKfQoKaW50IG1haW4oKXsgCiAgICAKICAgICAgIAoKY2luPj5uIDsKcmVwKGkgLG4pIGNpbj4+YVtpXSA7CgpjaW4+PnEgOwoKcmVwKGkgLHEpewogICAgCmNpbj4+eD4+eSA7CiAgICAKICAgIFFbaV0uaSA9IGkgLCBRW2ldLmwgPSB4IC0xICwgUVtpXS5yID0geSAtMSA7CiAgICAKfQoKc29ydChRICwgUSArIHEgLCBjb21wKSA7CgoKaW50IFN0YXJ0ID0gMCAsRW5kID0gLTEgOwpyZXAoaSAsIHEpewogICAgCiAgIAogIGwgPSBRW2ldLmwgOwogIHIgPSBRW2ldLnIgOwoKICAgd2hpbGUobCA8IFN0YXJ0KSBTdGFydC0tICwgcGx1c3MoU3RhcnQpIDsKICAgd2hpbGUoRW5kIDwgcikgRW5kKysgLCBwbHVzcyhFbmQpIDsKCiAgIHdoaWxlKGwgPiBTdGFydCkgICBtaW51c3MoU3RhcnQpICwgU3RhcnQrKyA7CiAgIHdoaWxlKEVuZCAgPiByKSBtaW51c3MoRW5kKSAsIEVuZC0tIDsKICAgIAogYltRW2ldLmldID0gY3QgOwp9CgoKcmVwKGkgLCBxKSBjb3V0PDxiW2ldPDwiXG4iOwoKCnJldHVybiAwOwp9CgoKCg==