#include <bits/stdc++.h>
using namespace std;
const int MAXN = 30005;
const int MAXVAL = 1000005;
int bit[MAXN];
int a[MAXN];
int last_pos[MAXVAL];
int ans[200005];
int n, q;
struct Query {
int l, r, id;
bool operator<(const Query& other) const {
return r < other.r;
}
};
void update(int idx, int val) {
for (; idx <= n; idx += idx & -idx)
bit[idx] += val;
}
int getSum(int idx) {
int sum = 0;
for (; idx > 0; idx -= idx & -idx)
sum += bit[idx];
return sum;
}
int main() {
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cin >> n;
for (int i = 1; i <= n; i++) {
cin >> a[i];
}
cin >> q;
vector<Query> queries(q);
for (int i = 0; i < q; i++) {
cin >> queries[i].l >> queries[i].r;
queries[i].id = i;
}
sort(queries.begin(), queries.end());
int current_query = 0;
for (int i = 1; i <= n; i++) {
int val = a[i];
if (last_pos[val] != 0) {
update(last_pos[val], -1);
}
update(i, 1);
last_pos[val] = i;
while (current_query < q && queries[current_query].r == i) {
int L = queries[current_query].l;
int R = queries[current_query].r;
int query_id = queries[current_query].id;
ans[query_id] = getSum(R) - getSum(L - 1);
current_query++;
}
}
for (int i = 0; i < q; i++) {
cout << ans[i] << "\n";
}
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+Cgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKY29uc3QgaW50IE1BWE4gPSAzMDAwNTsKY29uc3QgaW50IE1BWFZBTCA9IDEwMDAwMDU7CgppbnQgYml0W01BWE5dOwppbnQgYVtNQVhOXTsKaW50IGxhc3RfcG9zW01BWFZBTF07IAppbnQgYW5zWzIwMDAwNV07ICAgICAKaW50IG4sIHE7CgoKc3RydWN0IFF1ZXJ5IHsKICAgIGludCBsLCByLCBpZDsKICAgIGJvb2wgb3BlcmF0b3I8KGNvbnN0IFF1ZXJ5JiBvdGhlcikgY29uc3QgewogICAgICAgIHJldHVybiByIDwgb3RoZXIucjsKICAgIH0KfTsKCnZvaWQgdXBkYXRlKGludCBpZHgsIGludCB2YWwpIHsKICAgIGZvciAoOyBpZHggPD0gbjsgaWR4ICs9IGlkeCAmIC1pZHgpCiAgICAgICAgYml0W2lkeF0gKz0gdmFsOwp9CgppbnQgZ2V0U3VtKGludCBpZHgpIHsKICAgIGludCBzdW0gPSAwOwogICAgZm9yICg7IGlkeCA+IDA7IGlkeCAtPSBpZHggJiAtaWR4KQogICAgICAgIHN1bSArPSBiaXRbaWR4XTsKICAgIHJldHVybiBzdW07Cn0KCmludCBtYWluKCkgewogICAgaW9zX2Jhc2U6OnN5bmNfd2l0aF9zdGRpbyhmYWxzZSk7CiAgICBjaW4udGllKE5VTEwpOwoKICAgIGNpbiA+PiBuOwogICAgZm9yIChpbnQgaSA9IDE7IGkgPD0gbjsgaSsrKSB7CiAgICAgICAgY2luID4+IGFbaV07CiAgICB9CgogICAgY2luID4+IHE7CiAgICB2ZWN0b3I8UXVlcnk+IHF1ZXJpZXMocSk7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IHE7IGkrKykgewogICAgICAgIGNpbiA+PiBxdWVyaWVzW2ldLmwgPj4gcXVlcmllc1tpXS5yOwogICAgICAgIHF1ZXJpZXNbaV0uaWQgPSBpOyAKICAgIH0KICAgIHNvcnQocXVlcmllcy5iZWdpbigpLCBxdWVyaWVzLmVuZCgpKTsKICAgIGludCBjdXJyZW50X3F1ZXJ5ID0gMDsKICAgIGZvciAoaW50IGkgPSAxOyBpIDw9IG47IGkrKykgewogICAgICAgIGludCB2YWwgPSBhW2ldOwogICAgICAgIGlmIChsYXN0X3Bvc1t2YWxdICE9IDApIHsKICAgICAgICAgICAgdXBkYXRlKGxhc3RfcG9zW3ZhbF0sIC0xKTsKICAgICAgICB9CiAgICAgICAgdXBkYXRlKGksIDEpOwogICAgICAgIGxhc3RfcG9zW3ZhbF0gPSBpOwogICAgICAgIHdoaWxlIChjdXJyZW50X3F1ZXJ5IDwgcSAmJiBxdWVyaWVzW2N1cnJlbnRfcXVlcnldLnIgPT0gaSkgewogICAgICAgICAgICBpbnQgTCA9IHF1ZXJpZXNbY3VycmVudF9xdWVyeV0ubDsKICAgICAgICAgICAgaW50IFIgPSBxdWVyaWVzW2N1cnJlbnRfcXVlcnldLnI7CiAgICAgICAgICAgIGludCBxdWVyeV9pZCA9IHF1ZXJpZXNbY3VycmVudF9xdWVyeV0uaWQ7CiAgICAgICAgICAgIGFuc1txdWVyeV9pZF0gPSBnZXRTdW0oUikgLSBnZXRTdW0oTCAtIDEpOwogICAgICAgICAgICBjdXJyZW50X3F1ZXJ5Kys7CiAgICAgICAgfQogICAgfQogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBxOyBpKyspIHsKICAgICAgICBjb3V0IDw8IGFuc1tpXSA8PCAiXG4iOwogICAgfQoKICAgIHJldHVybiAwOwp9Cg==