#include <vector>
#include <cstdio>
#include <cstring>
#include <queue>
#include <cctype>
#include <cmath>
#include <algorithm>
#include <iostream>
#include <bitset>
#include <map>
#include <complex>
#include <ctime>
#include <numeric>
#include <set>
 
using namespace std;
 
typedef long long ll;
 
typedef struct node{
    int s, e, val, pos;
    bool operator<(const node& n) const{
        if(e != n.e) return e < n.e;
        return val > n.val;
    }
    node(){};
    node(int ss, int ee, int v, int p){
        s = ss, e = ee, val = v, pos = p;
    }
}node;
 
int occs[(int)1e6 + 5], tree[30005], n, ans[200005];
 
void update(int x, int val){
    while(x <= n){
        tree[x] += val;
        x += x & -x;
    }
}
 
int query(int x){
    int ret = 0;
    while(x > 0){
        ret += tree[x];
        x -= x & -x;
    }
    return ret;
}
 
int main()
{
#ifndef ONLINE_JUDGE
    freopen("in.in", "r", stdin);
#endif
 
    int q, s, e;
    vector<node> v;
    scanf("%d", &n);
    for(int i = 1; i <= n; i++){
        scanf("%d", &s);
        v.push_back(node(i, i, s, -1));
    }
    scanf("%d", &q);
    for(int i = 0; i < q; i++){
        scanf("%d %d", &s, &e);
        v.push_back(node(s, e, 0, i));
    }
 
    sort(v.begin(), v.end());
 
    for(int i = 0;i < v.size(); i++){
        if(v[i].val == 0){
            ans[v[i].pos] = query(v[i].e) - query(v[i].s - 1);
        }else{
            if(occs[v[i].val] != 0) update(occs[v[i].val], -1);
            update(v[i].s, 1);
            occs[v[i].val] = v[i].s;
        }
    }
 
    for(int i = 0; i < q; i++){
        printf("%d\n", ans[i]);
    }
 
    return 0;
}
 
 
				I2luY2x1ZGUgPHZlY3Rvcj4KI2luY2x1ZGUgPGNzdGRpbz4KI2luY2x1ZGUgPGNzdHJpbmc+CiNpbmNsdWRlIDxxdWV1ZT4KI2luY2x1ZGUgPGNjdHlwZT4KI2luY2x1ZGUgPGNtYXRoPgojaW5jbHVkZSA8YWxnb3JpdGhtPgojaW5jbHVkZSA8aW9zdHJlYW0+CiNpbmNsdWRlIDxiaXRzZXQ+CiNpbmNsdWRlIDxtYXA+CiNpbmNsdWRlIDxjb21wbGV4PgojaW5jbHVkZSA8Y3RpbWU+CiNpbmNsdWRlIDxudW1lcmljPgojaW5jbHVkZSA8c2V0PgoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCnR5cGVkZWYgbG9uZyBsb25nIGxsOwoKdHlwZWRlZiBzdHJ1Y3Qgbm9kZXsKICAgIGludCBzLCBlLCB2YWwsIHBvczsKICAgIGJvb2wgb3BlcmF0b3I8KGNvbnN0IG5vZGUmIG4pIGNvbnN0ewogICAgICAgIGlmKGUgIT0gbi5lKSByZXR1cm4gZSA8IG4uZTsKICAgICAgICByZXR1cm4gdmFsID4gbi52YWw7CiAgICB9CiAgICBub2RlKCl7fTsKICAgIG5vZGUoaW50IHNzLCBpbnQgZWUsIGludCB2LCBpbnQgcCl7CiAgICAgICAgcyA9IHNzLCBlID0gZWUsIHZhbCA9IHYsIHBvcyA9IHA7CiAgICB9Cn1ub2RlOwoKaW50IG9jY3NbKGludCkxZTYgKyA1XSwgdHJlZVszMDAwNV0sIG4sIGFuc1syMDAwMDVdOwoKdm9pZCB1cGRhdGUoaW50IHgsIGludCB2YWwpewogICAgd2hpbGUoeCA8PSBuKXsKICAgICAgICB0cmVlW3hdICs9IHZhbDsKICAgICAgICB4ICs9IHggJiAteDsKICAgIH0KfQoKaW50IHF1ZXJ5KGludCB4KXsKICAgIGludCByZXQgPSAwOwogICAgd2hpbGUoeCA+IDApewogICAgICAgIHJldCArPSB0cmVlW3hdOwogICAgICAgIHggLT0geCAmIC14OwogICAgfQogICAgcmV0dXJuIHJldDsKfQoKaW50IG1haW4oKQp7CiNpZm5kZWYgT05MSU5FX0pVREdFCiAgICBmcmVvcGVuKCJpbi5pbiIsICJyIiwgc3RkaW4pOwojZW5kaWYKICAgIAogICAgaW50IHEsIHMsIGU7CiAgICB2ZWN0b3I8bm9kZT4gdjsKICAgIHNjYW5mKCIlZCIsICZuKTsKICAgIGZvcihpbnQgaSA9IDE7IGkgPD0gbjsgaSsrKXsKICAgICAgICBzY2FuZigiJWQiLCAmcyk7CiAgICAgICAgdi5wdXNoX2JhY2sobm9kZShpLCBpLCBzLCAtMSkpOwogICAgfQogICAgc2NhbmYoIiVkIiwgJnEpOwogICAgZm9yKGludCBpID0gMDsgaSA8IHE7IGkrKyl7CiAgICAgICAgc2NhbmYoIiVkICVkIiwgJnMsICZlKTsKICAgICAgICB2LnB1c2hfYmFjayhub2RlKHMsIGUsIDAsIGkpKTsKICAgIH0KICAgIAogICAgc29ydCh2LmJlZ2luKCksIHYuZW5kKCkpOwogICAgCiAgICBmb3IoaW50IGkgPSAwO2kgPCB2LnNpemUoKTsgaSsrKXsKICAgICAgICBpZih2W2ldLnZhbCA9PSAwKXsKICAgICAgICAgICAgYW5zW3ZbaV0ucG9zXSA9IHF1ZXJ5KHZbaV0uZSkgLSBxdWVyeSh2W2ldLnMgLSAxKTsKICAgICAgICB9ZWxzZXsKICAgICAgICAgICAgaWYob2Njc1t2W2ldLnZhbF0gIT0gMCkgdXBkYXRlKG9jY3NbdltpXS52YWxdLCAtMSk7CiAgICAgICAgICAgIHVwZGF0ZSh2W2ldLnMsIDEpOwogICAgICAgICAgICBvY2NzW3ZbaV0udmFsXSA9IHZbaV0uczsKICAgICAgICB9CiAgICB9CiAgICAKICAgIGZvcihpbnQgaSA9IDA7IGkgPCBxOyBpKyspewogICAgICAgIHByaW50ZigiJWRcbiIsIGFuc1tpXSk7CiAgICB9CiAgICAKICAgIHJldHVybiAwOwp9Cgo=