#include<bits/stdc++.h>
using namespace std;
const int N = 2e5 + 5;
const int VAL = 1e6 + 5;
int n , q , S , ans;
int a[N] , cnt[VAL] , res[N];
int L = 1 , R = 0;
struct query{
int l , r , id;
} qu[N];
void MO(int i)
{
while(L < qu[i].l)
{
cnt[a[L]]--;
if(cnt[a[L]] == 0)
ans--;
L++;
}
while(L > qu[i].l)
{
L--;
if(cnt[a[L]] == 0)
ans++;
cnt[a[L]]++;
}
while(R < qu[i].r)
{
R++;
if(cnt[a[R]] == 0)
ans++;
cnt[a[R]]++;
}
while(R > qu[i].r)
{
cnt[a[R]]--;
if(cnt[a[R]] == 0)
ans--;
R--;
}
}
bool cmp(query a , query b)
{
if(a.l / S == b.l / S)
return a.r < b.r;
return a.l < b.l;
}
main()
{
ios::sync_with_stdio(0);
cin.tie(0);
cin >> n;
S = sqrt(n);
for(int i = 1 ; i <= n ; i++)
cin >> a[i];
cin >> q;
for(int i = 1 ; i <= q ; i++)
{
cin >> qu[i].l >> qu[i].r;
qu[i].id = i;
}
sort(qu + 1 , qu + 1 + q , cmp);
for(int i = 1 ; i <= q ; i++)
{
MO(i);
res[qu[i].id] = ans;
}
for(int i = 1 ; i <= q ; i++)
cout << res[i] << "\n";
}
ICAgICNpbmNsdWRlPGJpdHMvc3RkYysrLmg+CiAgICB1c2luZyBuYW1lc3BhY2Ugc3RkOwoKICAgIGNvbnN0IGludCBOID0gMmU1ICsgNTsKICAgIGNvbnN0IGludCBWQUwgPSAxZTYgKyA1OwogICAgaW50IG4gLCBxICwgUyAsIGFuczsKICAgIGludCBhW05dICwgY250W1ZBTF0gLCByZXNbTl07CiAgICBpbnQgTCA9IDEgLCBSID0gMDsKCiAgICBzdHJ1Y3QgcXVlcnl7CiAgICAgICAgaW50IGwgLCByICwgaWQ7CiAgICB9IHF1W05dOwoKICAgIHZvaWQgTU8oaW50IGkpCiAgICB7CiAgICAgICAgd2hpbGUoTCA8IHF1W2ldLmwpCiAgICAgICAgewogICAgICAgICAgICBjbnRbYVtMXV0tLTsKICAgICAgICAgICAgaWYoY250W2FbTF1dID09IDApCiAgICAgICAgICAgICAgICBhbnMtLTsKICAgICAgICAgICAgTCsrOwogICAgICAgIH0KICAgICAgICB3aGlsZShMID4gcXVbaV0ubCkKICAgICAgICB7CiAgICAgICAgICAgIEwtLTsKICAgICAgICAgICAgaWYoY250W2FbTF1dID09IDApCiAgICAgICAgICAgICAgICBhbnMrKzsKICAgICAgICAgICAgY250W2FbTF1dKys7CiAgICAgICAgfQogICAgICAgIHdoaWxlKFIgPCBxdVtpXS5yKQogICAgICAgIHsKICAgICAgICAgICAgUisrOwogICAgICAgICAgICBpZihjbnRbYVtSXV0gPT0gMCkKICAgICAgICAgICAgICAgIGFucysrOwogICAgICAgICAgICBjbnRbYVtSXV0rKzsKICAgICAgIAogICAgICAgIH0KICAgICAgICB3aGlsZShSID4gcXVbaV0ucikKICAgICAgICB7CiAgICAgICAgICAgIGNudFthW1JdXS0tOwogICAgICAgICAgICBpZihjbnRbYVtSXV0gPT0gMCkKICAgICAgICAgICAgICAgIGFucy0tOwogICAgICAgICAgICBSLS07CiAgICAgICAgfQogICAgfQoKICAgIGJvb2wgY21wKHF1ZXJ5IGEgLCBxdWVyeSBiKQogICAgewogICAgICAgIGlmKGEubCAvIFMgPT0gYi5sIC8gUykKICAgICAgICAgICAgcmV0dXJuIGEuciA8IGIucjsKICAgICAgICByZXR1cm4gYS5sIDwgYi5sOwogICAgfQoKICAgIG1haW4oKQogICAgewogICAgICAgIGlvczo6c3luY193aXRoX3N0ZGlvKDApOwogICAgICAgIGNpbi50aWUoMCk7CiAgICAgICAgY2luID4+IG47CiAgICAgICAgIFMgPSBzcXJ0KG4pOwogICAgICAgIGZvcihpbnQgaSA9IDEgOyBpIDw9IG4gOyBpKyspCiAgICAgICAgICAgIGNpbiA+PiBhW2ldOwogICAgICAgIGNpbiA+PiBxOwogICAgICAgIGZvcihpbnQgaSA9IDEgOyBpIDw9IHEgOyBpKyspCiAgICAgICAgewogICAgICAgICAgICBjaW4gPj4gcXVbaV0ubCA+PiBxdVtpXS5yOwogICAgICAgICAgICBxdVtpXS5pZCA9IGk7CiAgICAgICAgfQogICAgICAgIHNvcnQocXUgKyAxICwgcXUgKyAxICsgcSAsIGNtcCk7CiAgICAgICAgCiAgICAgICAgZm9yKGludCBpID0gMSA7IGkgPD0gcSA7IGkrKykKICAgICAgICB7CiAgICAgICAgICAgIE1PKGkpOwogICAgICAgICAgICByZXNbcXVbaV0uaWRdID0gYW5zOwogICAgICAgIH0KICAgICAgICBmb3IoaW50IGkgPSAxIDsgaSA8PSBxIDsgaSsrKQogICAgICAgICAgICBjb3V0IDw8IHJlc1tpXSA8PCAiXG4iOwogICAgfQ==