#include<iostream>
#include<vector>
#include<set>
#include<iterator>
#include<algorithm>
using namespace std;
#define fast ios::sync_with_stdio(0); cin.tie(0);
const int MAX = 1e5 + 5;
const int LIM = 3e5 + 5; //equals 2 * 2^ceil(log2(n))
int input[MAX];
vector<set<int> > seg(LIM);
void build(int l, int r, int i)
{
if(l>r)
return ;
if(l == r)
{
set<int>s;
s.insert(input[l]);
seg[i] = s;
return ;
}
int mid = ( l + r ) / 2;
build(l , mid , 2*i + 1);
build(mid+1, r, 2*i + 2);
set_union(seg[2*i+1].begin(),seg[2*i+1].end(),seg[2*i+2].begin(),seg[2*i+2].end(),insert_iterator<set<int> >(seg[i], seg[i].begin()));
}
set<int> query(int t, int i, int j, int l, int r)
{
if (i > r || j < l){
//base case: result of out-of-bound query
set<int>s;
return s;
}
if (l <=i && j <= r) {
return seg[t];
}
int mid = (i + j) / 2;
set<int> a = query(t*2 + 1, i, mid, l, r) ;
set<int> b = query(t*2 + 2, mid + 1, j, l, r);
set<int>d;
set_union(a.begin(),a.end(),b.begin(),b.end(),insert_iterator<set<int> >(d, d.begin()));
return d;
}
int main()
{
fast
int n;
scanf("%d",&n);
for(int i=0;i<n;i++)
scanf("%d ",&input[i]);
build(0,n-1,0);
int q;
scanf("%d",&q);
while(q--)
{
int l,r;
scanf("%d %d",&l,&r);
printf("%d\n",query(0,0,n-1,l-1,r-1).size());
}
return 0;
}
I2luY2x1ZGU8aW9zdHJlYW0+CiNpbmNsdWRlPHZlY3Rvcj4KI2luY2x1ZGU8c2V0PgojaW5jbHVkZTxpdGVyYXRvcj4KI2luY2x1ZGU8YWxnb3JpdGhtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwojZGVmaW5lIGZhc3QgaW9zOjpzeW5jX3dpdGhfc3RkaW8oMCk7IGNpbi50aWUoMCk7CmNvbnN0IGludCBNQVggPSAxZTUgKyA1Owpjb25zdCBpbnQgTElNID0gM2U1ICsgNTsgICAgICAgIC8vZXF1YWxzIDIgKiAyXmNlaWwobG9nMihuKSkKCmludCBpbnB1dFtNQVhdOwp2ZWN0b3I8c2V0PGludD4gPiBzZWcoTElNKTsKdm9pZCBidWlsZChpbnQgbCwgaW50IHIsIGludCBpKQp7CglpZihsPnIpCglyZXR1cm4gOwoJaWYobCA9PSByKQoJewoJCXNldDxpbnQ+czsKCQlzLmluc2VydChpbnB1dFtsXSk7CgkJc2VnW2ldID0gczsKCQlyZXR1cm4gOwoJfQoJaW50IG1pZCA9ICggbCArIHIgKSAvIDI7CglidWlsZChsICwgbWlkICwgMippICsgMSk7CglidWlsZChtaWQrMSwgciwgMippICsgMik7CglzZXRfdW5pb24oc2VnWzIqaSsxXS5iZWdpbigpLHNlZ1syKmkrMV0uZW5kKCksc2VnWzIqaSsyXS5iZWdpbigpLHNlZ1syKmkrMl0uZW5kKCksaW5zZXJ0X2l0ZXJhdG9yPHNldDxpbnQ+ID4oc2VnW2ldLCBzZWdbaV0uYmVnaW4oKSkpOwp9CgpzZXQ8aW50PiBxdWVyeShpbnQgdCwgaW50IGksIGludCBqLCBpbnQgbCwgaW50IHIpIAp7CglpZiAoaSA+IHIgfHwgaiA8IGwpewoJCS8vYmFzZSBjYXNlOiByZXN1bHQgb2Ygb3V0LW9mLWJvdW5kIHF1ZXJ5CgkJc2V0PGludD5zOwoJCXJldHVybiBzOwoJfQoJaWYgKGwgPD1pICYmIGogPD0gcikgewoJCXJldHVybiBzZWdbdF07Cgl9CglpbnQgbWlkID0gKGkgKyBqKSAvIDI7CglzZXQ8aW50PiBhID0gcXVlcnkodCoyICsgMSwgaSwgbWlkLCBsLCByKSA7CglzZXQ8aW50PiBiID0gcXVlcnkodCoyICsgMiwgIG1pZCArIDEsIGosIGwsIHIpOwoJc2V0PGludD5kOwoJc2V0X3VuaW9uKGEuYmVnaW4oKSxhLmVuZCgpLGIuYmVnaW4oKSxiLmVuZCgpLGluc2VydF9pdGVyYXRvcjxzZXQ8aW50PiA+KGQsIGQuYmVnaW4oKSkpOwogICAgcmV0dXJuIGQ7Cn0KCmludCBtYWluKCkKewoJZmFzdAoJaW50IG47CglzY2FuZigiJWQiLCZuKTsKCWZvcihpbnQgaT0wO2k8bjtpKyspCglzY2FuZigiJWQgIiwmaW5wdXRbaV0pOwoJCglidWlsZCgwLG4tMSwwKTsKICAgIGludCBxOyAKCXNjYW5mKCIlZCIsJnEpOwoJd2hpbGUocS0tKQoJewoJCWludCBsLHI7CgkJc2NhbmYoIiVkICVkIiwmbCwmcik7CgkJIHByaW50ZigiJWRcbiIscXVlcnkoMCwwLG4tMSxsLTEsci0xKS5zaXplKCkpOwoJfQoJcmV0dXJuIDA7Cn0=