#include <bits/stdc++.h>
#define ll long long int
#define ld long double
#define nl "\n"
#define ull unsigned long long
#define rv return void
#define str string
#define all(x) x.begin(), x.end()
#define allr(x) x.rbegin(), x.rend()
#define vec vector
#define fixed(n) fixed << setprecision(n)
#define Moageza ios::sync_with_stdio(false); cout.tie(NULL); cin.tie(NULL);
using namespace std;
const ll mod = 1e9+7;
const int N=2e5+5;
const int Qu=2e5+5;
const int SQ=488;
struct Query{
int l,r,q_idx,blk_idx;
Query(){}
Query(int _l,int _r,int _q_idx)
{
l=_l,r=_r,q_idx=_q_idx,blk_idx=_l/SQ;
}
bool operator<(const Query&Q)const{
if(blk_idx!=Q.blk_idx)
{
return blk_idx<Q.blk_idx;
}
return r<Q.r;
}
};
ll n,q,arr[N],frq[1000006],res=0,ans[Qu];Query qu[Qu];
void add(int idx)
{
if(!frq[arr[idx]])res++;
frq[arr[idx]]++;
}
void remove(int idx)
{
frq[arr[idx]]--;
if(!frq[arr[idx]])res--;
}
void MO_process()
{
sort(qu,qu+q);
int l=1,r=0;
for(int i=0;i<q;i++)
{
while(l<qu[i].l) remove(l++);
while(l>qu[i].l) add(--l);
while(r<qu[i].r) add(++r);
while(r>qu[i].r) remove(r--);
ans[qu[i].q_idx]=res;
}
}
void solve() {
cin>>n;
for(int i=0;i<n;i++)
{
cin>>arr[i];
}
cin>>q;
for(int i=0;i<q;i++)
{
int l,r;cin>>l>>r;
qu[i]=Query(--l,--r,i);
}
MO_process();
for(int i=0;i<q;i++)
{
cout<<ans[i]<<'\n';
}
}
signed main()
{
Moageza
#ifndef ONLINE_JUDGE
freopen("input.txt", "r", stdin);
freopen("output.txt", "w", stdout);
#endif
int t = 1;
// cin >> t;
while (t--) {
solve();
cout <<nl;
}
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CiNkZWZpbmUgbGwgbG9uZyBsb25nIGludAojZGVmaW5lIGxkIGxvbmcgZG91YmxlCiNkZWZpbmUgbmwgIlxuIgojZGVmaW5lIHVsbCB1bnNpZ25lZCBsb25nIGxvbmcKI2RlZmluZSBydiByZXR1cm4gdm9pZAojZGVmaW5lIHN0ciBzdHJpbmcKI2RlZmluZSBhbGwoeCkgeC5iZWdpbigpLCB4LmVuZCgpCiNkZWZpbmUgYWxscih4KSB4LnJiZWdpbigpLCB4LnJlbmQoKQojZGVmaW5lIHZlYyB2ZWN0b3IKI2RlZmluZSBmaXhlZChuKSBmaXhlZCA8PCBzZXRwcmVjaXNpb24obikKI2RlZmluZSBNb2FnZXphIGlvczo6c3luY193aXRoX3N0ZGlvKGZhbHNlKTsgY291dC50aWUoTlVMTCk7IGNpbi50aWUoTlVMTCk7CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CmNvbnN0IGxsIG1vZCA9IDFlOSs3Owpjb25zdCBpbnQgTj0yZTUrNTsKY29uc3QgaW50IFF1PTJlNSs1Owpjb25zdCBpbnQgU1E9NDg4OwpzdHJ1Y3QgUXVlcnl7CiAgICBpbnQgbCxyLHFfaWR4LGJsa19pZHg7CiAgICBRdWVyeSgpe30KICAgIFF1ZXJ5KGludCBfbCxpbnQgX3IsaW50IF9xX2lkeCkKICAgIHsKICAgICAgICBsPV9sLHI9X3IscV9pZHg9X3FfaWR4LGJsa19pZHg9X2wvU1E7CiAgICB9CiAgICBib29sIG9wZXJhdG9yPChjb25zdCBRdWVyeSZRKWNvbnN0ewogICAgICAgIGlmKGJsa19pZHghPVEuYmxrX2lkeCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiBibGtfaWR4PFEuYmxrX2lkeDsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHI8US5yOwogICAgfQp9OwpsbCBuLHEsYXJyW05dLGZycVsxMDAwMDA2XSxyZXM9MCxhbnNbUXVdO1F1ZXJ5IHF1W1F1XTsKdm9pZCBhZGQoaW50IGlkeCkKewogICBpZighZnJxW2FycltpZHhdXSlyZXMrKzsKICAgZnJxW2FycltpZHhdXSsrOwp9CnZvaWQgcmVtb3ZlKGludCBpZHgpCnsKICAgIGZycVthcnJbaWR4XV0tLTsKICAgIGlmKCFmcnFbYXJyW2lkeF1dKXJlcy0tOwp9CnZvaWQgTU9fcHJvY2VzcygpCnsKICAgIHNvcnQocXUscXUrcSk7CiAgICBpbnQgbD0xLHI9MDsKICAgIGZvcihpbnQgaT0wO2k8cTtpKyspCiAgICB7CiAgICAgICAgd2hpbGUobDxxdVtpXS5sKSByZW1vdmUobCsrKTsKICAgICAgICB3aGlsZShsPnF1W2ldLmwpIGFkZCgtLWwpOwogICAgICAgIHdoaWxlKHI8cXVbaV0ucikgYWRkKCsrcik7CiAgICAgICAgd2hpbGUocj5xdVtpXS5yKSByZW1vdmUoci0tKTsKICAgICAgICBhbnNbcXVbaV0ucV9pZHhdPXJlczsKICAgIH0KfQp2b2lkIHNvbHZlKCkgewogICAgY2luPj5uOwogICAgZm9yKGludCBpPTA7aTxuO2krKykKICAgIHsKICAgICAgICBjaW4+PmFycltpXTsKICAgIH0KICAgIGNpbj4+cTsKICAgIGZvcihpbnQgaT0wO2k8cTtpKyspCiAgICB7CiAgICAgICAgaW50IGwscjtjaW4+Pmw+PnI7CiAgICAgICAgcXVbaV09UXVlcnkoLS1sLC0tcixpKTsKICAgIH0KICAgIE1PX3Byb2Nlc3MoKTsKICAgIGZvcihpbnQgaT0wO2k8cTtpKyspCiAgICB7CiAgICAgICAgY291dDw8YW5zW2ldPDwnXG4nOwogICAgfQp9CnNpZ25lZCBtYWluKCkKewogICAgTW9hZ2V6YQogICAgI2lmbmRlZiBPTkxJTkVfSlVER0UKICAgICAgICBmcmVvcGVuKCJpbnB1dC50eHQiLCAiciIsIHN0ZGluKTsKICAgICAgICBmcmVvcGVuKCJvdXRwdXQudHh0IiwgInciLCBzdGRvdXQpOwogICAgI2VuZGlmCiAgICBpbnQgdCA9IDE7CiAgICAvLyBjaW4gPj4gdDsKICAgIHdoaWxlICh0LS0pIHsKICAgICAgICBzb2x2ZSgpOwogICAgICAgIGNvdXQgPDxubDsKICAgIH0KICAgIAogICAgcmV0dXJuIDA7Cn0=