#include <unordered_set>
#include <unordered_map>
#include <bits/stdc++.h>
#define lli long long int
#define all(x) x.begin(),x.end()
#define b(x) x.begin()
#define e(x) x.end()
#define sz(x) x.size()
#define vi vector<int>
#define vli vector<long long int>
#define pi pair<int,int>
#define pli pair<long long int,long long int>
#define pr pair
#define ff first
#define ss second
#define vt vector
#define um unordered_map
#define us unordered_set
#define mod 1000000007
#define pb push_back
#define pf push_front
#define endl '\n'
#define loop(i,a,b) for(lli i=a;i<b;i++)
#define loopr(i,a,b) for(lli i=a;i>=b;i--)
#define foit(it,x) for(auto &it:x)
using namespace std;
int dx[] = {-1,1,0,0,-1,-1,1,1};
int dy[] = {0,0,1,-1,-1,1,-1,1};
const int block = 200;
typedef struct
{
int l;
int r;
int id;
}query;
bool cmp(query &a, query &b)
{
return (((a.l/block)<(b.l/block))||(a.r<=b.r));
}
void add(auto &m, int num)
{
m[num]++;
}
void removee(auto &m, int num)
{
if(m.find(num)!=e(m))
{
m[num]--;
if(m[num]==0) m.erase(num);
}
}
void solve()
{
int t=1;
//cin>>t;
while(t--)
{
int n; cin>>n;
vi v(n);
loop(i,0,n) cin>>v[i];
int q; cin>>q;
vt<query>Q;
loop(i,0,q)
{
int l,r; cin>>l>>r; l--,r--;
Q.pb({l,r,(int)i});
}
sort(all(Q),cmp);
int curr_l = Q[0].l,curr_r = Q[0].r;
vi ans(q);
map<int,lli>m;
loop(i,curr_l,curr_r+1) m[v[i]]++;
loop(i,0,q)
{
while(Q[i].l<curr_l)
{
curr_l--;
add(m,v[curr_l]);
}
while(Q[i].r>curr_r)
{
curr_r++;
add(m,v[curr_r]);
}
while(Q[i].l>curr_l)
{
removee(m,v[curr_l]);
curr_l++;
}
while(Q[i].r<curr_r)
{
removee(m,v[curr_r]);
curr_r--;
}
ans[Q[i].id] = sz(m);
}
loop(i,0,q) cout<<ans[i]<<endl;
}
}
int main()
{
clock_t start, end;
start = clock();
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
#ifndef ONLINE_JUDGE
freopen("input.txt","r",stdin);
freopen("output.txt","w",stdout);
#endif
solve();
end = clock();
#ifndef ONLINE_JUDGE
double time_taken = double(end - start) / double(CLOCKS_PER_SEC);
cout << "Time taken is : " << fixed
<< time_taken << setprecision(5);
cout << " sec " << endl;
#endif
return 0;
}
I2luY2x1ZGUgPHVub3JkZXJlZF9zZXQ+CiNpbmNsdWRlIDx1bm9yZGVyZWRfbWFwPgojaW5jbHVkZSA8Yml0cy9zdGRjKysuaD4KCiNkZWZpbmUgbGxpIGxvbmcgbG9uZyBpbnQKI2RlZmluZSBhbGwoeCkgeC5iZWdpbigpLHguZW5kKCkKI2RlZmluZSBiKHgpIHguYmVnaW4oKQojZGVmaW5lIGUoeCkgeC5lbmQoKQojZGVmaW5lIHN6KHgpIHguc2l6ZSgpCiNkZWZpbmUgdmkgdmVjdG9yPGludD4KI2RlZmluZSB2bGkgdmVjdG9yPGxvbmcgbG9uZyBpbnQ+CiNkZWZpbmUgcGkgcGFpcjxpbnQsaW50PgojZGVmaW5lIHBsaSBwYWlyPGxvbmcgbG9uZyBpbnQsbG9uZyBsb25nIGludD4KI2RlZmluZSBwciBwYWlyCiNkZWZpbmUgZmYgZmlyc3QKI2RlZmluZSBzcyBzZWNvbmQKI2RlZmluZSB2dCB2ZWN0b3IKI2RlZmluZSB1bSB1bm9yZGVyZWRfbWFwCiNkZWZpbmUgdXMgdW5vcmRlcmVkX3NldAojZGVmaW5lIG1vZCAxMDAwMDAwMDA3CiNkZWZpbmUgcGIgcHVzaF9iYWNrCiNkZWZpbmUgcGYgcHVzaF9mcm9udAojZGVmaW5lIGVuZGwgJ1xuJwojZGVmaW5lIGxvb3AoaSxhLGIpIGZvcihsbGkgaT1hO2k8YjtpKyspCiNkZWZpbmUgbG9vcHIoaSxhLGIpIGZvcihsbGkgaT1hO2k+PWI7aS0tKQojZGVmaW5lIGZvaXQoaXQseCkgICBmb3IoYXV0byAmaXQ6eCkKCnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgppbnQgZHhbXSA9IHstMSwxLDAsMCwtMSwtMSwxLDF9OwppbnQgZHlbXSA9IHswLDAsMSwtMSwtMSwxLC0xLDF9OwoKY29uc3QgaW50IGJsb2NrID0gMjAwOwoKdHlwZWRlZiBzdHJ1Y3QKewogICAgaW50IGw7CiAgICBpbnQgcjsKICAgIGludCBpZDsKfXF1ZXJ5OwoKYm9vbCBjbXAocXVlcnkgJmEsIHF1ZXJ5ICZiKQp7CiAgICByZXR1cm4gKCgoYS5sL2Jsb2NrKTwoYi5sL2Jsb2NrKSl8fChhLnI8PWIucikpOwp9Cgp2b2lkIGFkZChhdXRvICZtLCBpbnQgbnVtKQp7CiAgICBtW251bV0rKzsKfQoKdm9pZCByZW1vdmVlKGF1dG8gJm0sIGludCBudW0pCnsKICAgIGlmKG0uZmluZChudW0pIT1lKG0pKQogICAgewogICAgICAgIG1bbnVtXS0tOwogICAgICAgIGlmKG1bbnVtXT09MCkgbS5lcmFzZShudW0pOwogICAgfQp9CnZvaWQgc29sdmUoKQp7CiAgICBpbnQgdD0xOwogICAgLy9jaW4+PnQ7CiAgICB3aGlsZSh0LS0pCiAgICB7CiAgICAgICAgaW50IG47IGNpbj4+bjsKICAgICAgICB2aSB2KG4pOwogICAgICAgIGxvb3AoaSwwLG4pIGNpbj4+dltpXTsKICAgICAgICBpbnQgcTsgY2luPj5xOwogICAgICAgIHZ0PHF1ZXJ5PlE7CiAgICAgICAgbG9vcChpLDAscSkKICAgICAgICB7CiAgICAgICAgICAgIGludCBsLHI7IGNpbj4+bD4+cjsgbC0tLHItLTsKICAgICAgICAgICAgUS5wYih7bCxyLChpbnQpaX0pOwogICAgICAgIH0KICAgICAgICBzb3J0KGFsbChRKSxjbXApOwogICAgICAgIGludCBjdXJyX2wgPSBRWzBdLmwsY3Vycl9yID0gUVswXS5yOwogICAgICAgIHZpIGFucyhxKTsKICAgICAgICBtYXA8aW50LGxsaT5tOwogICAgICAgIGxvb3AoaSxjdXJyX2wsY3Vycl9yKzEpIG1bdltpXV0rKzsKICAgICAgICBsb29wKGksMCxxKQogICAgICAgIHsKICAgICAgICAgICAgd2hpbGUoUVtpXS5sPGN1cnJfbCkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgY3Vycl9sLS07CiAgICAgICAgICAgICAgICBhZGQobSx2W2N1cnJfbF0pOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHdoaWxlKFFbaV0ucj5jdXJyX3IpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGN1cnJfcisrOwogICAgICAgICAgICAgICAgYWRkKG0sdltjdXJyX3JdKTsKICAgICAgICAgICAgfQogICAgICAgICAgICB3aGlsZShRW2ldLmw+Y3Vycl9sKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICByZW1vdmVlKG0sdltjdXJyX2xdKTsKICAgICAgICAgICAgICAgIGN1cnJfbCsrOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHdoaWxlKFFbaV0ucjxjdXJyX3IpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHJlbW92ZWUobSx2W2N1cnJfcl0pOwogICAgICAgICAgICAgICAgY3Vycl9yLS07CiAgICAgICAgICAgIH0KICAgICAgICAgICAgYW5zW1FbaV0uaWRdID0gc3oobSk7CiAgICAgICAgfQogICAgICAgIGxvb3AoaSwwLHEpIGNvdXQ8PGFuc1tpXTw8ZW5kbDsKICAgIH0KfQoKCmludCBtYWluKCkKewogICAgY2xvY2tfdCBzdGFydCwgZW5kOwogICAgc3RhcnQgPSBjbG9jaygpOwogICAgaW9zX2Jhc2U6OnN5bmNfd2l0aF9zdGRpbyhmYWxzZSk7CiAgICBjaW4udGllKE5VTEwpOwogICAgY291dC50aWUoTlVMTCk7CiAgICAjaWZuZGVmIE9OTElORV9KVURHRQogICAgZnJlb3BlbigiaW5wdXQudHh0IiwiciIsc3RkaW4pOwogICAgZnJlb3Blbigib3V0cHV0LnR4dCIsInciLHN0ZG91dCk7CiAgICAjZW5kaWYKICAgIHNvbHZlKCk7CiAgICBlbmQgPSBjbG9jaygpOwogICAgI2lmbmRlZiBPTkxJTkVfSlVER0UKICAgIGRvdWJsZSB0aW1lX3Rha2VuID0gZG91YmxlKGVuZCAtIHN0YXJ0KSAvIGRvdWJsZShDTE9DS1NfUEVSX1NFQyk7CiAgICBjb3V0IDw8ICJUaW1lIHRha2VuIGlzIDogIiA8PCBmaXhlZAogICAgICAgICA8PCB0aW1lX3Rha2VuIDw8IHNldHByZWNpc2lvbig1KTsKICAgIGNvdXQgPDwgIiBzZWMgIiA8PCBlbmRsOwogICAgI2VuZGlmCiAgICByZXR1cm4gMDsKfQo=