// Author : zvwgvx
// Problem :
#pragma GCC optimize("O3,unroll-loops")
#include <bits/stdc++.h>
#if LOCAL
#include "algo/debug.h"
#endif
using namespace std;
using ll = long long;
const int MOD = 1e9 + 7;
const int LIMIT = 1e6 + 7;
const ll INF = LLONG_MAX;
int block, cnt = 0;
vector<int> arr;
vector<int> freq(LIMIT, 0);
struct query {
int l, r, idx;
};
bool compare(const query& a, const query& b) {
int b_a = a.l / block, b_b = b.l / block;
if (b_a != b_b) return b_a < b_b;
return (b_a & 1) ? (a.r > b.r) : (a.r < b.r);
}
void add(int pos) {
if (freq[arr[pos]] == 0) ++cnt;
++freq[arr[pos]];
}
void remove(int pos) {
--freq[arr[pos]];
if (freq[arr[pos]] == 0) --cnt;
}
signed main() {
cin.tie(nullptr), cout.tie(nullptr) -> ios_base::sync_with_stdio(false);
#define task "sol"
if (fopen(task".inp", "r")) {
freopen(task".inp", "r", stdin), freopen(task".out", "w", stdout);
}
int n;
cin >> n;
block = sqrt(n);
arr.resize(n);
for (int& val : arr) cin >> val;
vector<int> comp = arr;
sort(comp.begin(), comp.end());
comp.erase(unique(comp.begin(), comp.end()), comp.end());
for (int& val : arr) val = lower_bound(comp.begin(), comp.end(), val) - comp.begin();
int q;
cin >> q;
vector<query> queries(q);
vector<int> result(q);
for (int i = 0; i < q; ++i) {
cin >> queries[i].l >> queries[i].r;
--queries[i].l, --queries[i].r;
queries[i].idx = i;
}
sort(queries.begin(), queries.end(), compare);
int l = 0, r = -1;
for (auto [L, R, P] : queries) {
while (l > L) add(--l);
while (r < R) add(++r);
while (l < L) remove(l++);
while (r > R) remove(r++);
result[P] = cnt;
}
for (int i = 0; i < q; ++i) cout << result[i] << '\n';
return 0;
}
Ly8gQXV0aG9yIDogenZ3Z3Z4Ci8vIFByb2JsZW0gOiAKCiNwcmFnbWEgR0NDIG9wdGltaXplKCJPMyx1bnJvbGwtbG9vcHMiKQojaW5jbHVkZSA8Yml0cy9zdGRjKysuaD4KCiNpZiBMT0NBTAojaW5jbHVkZSAiYWxnby9kZWJ1Zy5oIgojZW5kaWYKCnVzaW5nIG5hbWVzcGFjZSBzdGQ7CnVzaW5nIGxsID0gbG9uZyBsb25nOwoKY29uc3QgaW50IE1PRCA9IDFlOSArIDc7CmNvbnN0IGludCBMSU1JVCA9IDFlNiArIDc7CmNvbnN0IGxsIElORiA9IExMT05HX01BWDsKCmludCBibG9jaywgY250ID0gMDsKdmVjdG9yPGludD4gYXJyOwp2ZWN0b3I8aW50PiBmcmVxKExJTUlULCAwKTsKCnN0cnVjdCBxdWVyeSB7CiAgICBpbnQgbCwgciwgaWR4Owp9OwoKYm9vbCBjb21wYXJlKGNvbnN0IHF1ZXJ5JiBhLCBjb25zdCBxdWVyeSYgYikgewogICAgaW50IGJfYSA9IGEubCAvIGJsb2NrLCBiX2IgPSBiLmwgLyBibG9jazsKICAgIGlmIChiX2EgIT0gYl9iKSByZXR1cm4gYl9hIDwgYl9iOwogICAgcmV0dXJuIChiX2EgJiAxKSA/IChhLnIgPiBiLnIpIDogKGEuciA8IGIucik7Cn0KCnZvaWQgYWRkKGludCBwb3MpIHsKICAgIGlmIChmcmVxW2Fycltwb3NdXSA9PSAwKSArK2NudDsKICAgICsrZnJlcVthcnJbcG9zXV07Cn0KCnZvaWQgcmVtb3ZlKGludCBwb3MpIHsKICAgIC0tZnJlcVthcnJbcG9zXV07CiAgICBpZiAoZnJlcVthcnJbcG9zXV0gPT0gMCkgLS1jbnQ7Cn0KCnNpZ25lZCBtYWluKCkgeyAKICAgIGNpbi50aWUobnVsbHB0ciksIGNvdXQudGllKG51bGxwdHIpIC0+IGlvc19iYXNlOjpzeW5jX3dpdGhfc3RkaW8oZmFsc2UpOwoKICAgICNkZWZpbmUgdGFzayAic29sIgogICAgaWYgKGZvcGVuKHRhc2siLmlucCIsICJyIikpIHsKICAgICAgICBmcmVvcGVuKHRhc2siLmlucCIsICJyIiwgc3RkaW4pLCBmcmVvcGVuKHRhc2siLm91dCIsICJ3Iiwgc3Rkb3V0KTsKICAgIH0KCiAgICBpbnQgbjsKICAgIGNpbiA+PiBuOwoKICAgIGJsb2NrID0gc3FydChuKTsKCiAgICBhcnIucmVzaXplKG4pOwogICAgZm9yIChpbnQmIHZhbCA6IGFycikgY2luID4+IHZhbDsKCiAgICB2ZWN0b3I8aW50PiBjb21wID0gYXJyOwogICAgc29ydChjb21wLmJlZ2luKCksIGNvbXAuZW5kKCkpOwogICAgY29tcC5lcmFzZSh1bmlxdWUoY29tcC5iZWdpbigpLCBjb21wLmVuZCgpKSwgY29tcC5lbmQoKSk7CgogICAgZm9yIChpbnQmIHZhbCA6IGFycikgdmFsID0gbG93ZXJfYm91bmQoY29tcC5iZWdpbigpLCBjb21wLmVuZCgpLCB2YWwpIC0gY29tcC5iZWdpbigpOwoKICAgIGludCBxOwogICAgY2luID4+IHE7CgogICAgdmVjdG9yPHF1ZXJ5PiBxdWVyaWVzKHEpOwogICAgdmVjdG9yPGludD4gcmVzdWx0KHEpOwoKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcTsgKytpKSB7CiAgICAgICAgY2luID4+IHF1ZXJpZXNbaV0ubCA+PiBxdWVyaWVzW2ldLnI7CiAgICAgICAgLS1xdWVyaWVzW2ldLmwsIC0tcXVlcmllc1tpXS5yOwogICAgICAgIHF1ZXJpZXNbaV0uaWR4ID0gaTsKICAgIH0KCiAgICBzb3J0KHF1ZXJpZXMuYmVnaW4oKSwgcXVlcmllcy5lbmQoKSwgY29tcGFyZSk7CgogICAgaW50IGwgPSAwLCByID0gLTE7CiAgICBmb3IgKGF1dG8gW0wsIFIsIFBdIDogcXVlcmllcykgewogICAgICAgIHdoaWxlIChsID4gTCkgYWRkKC0tbCk7CiAgICAgICAgd2hpbGUgKHIgPCBSKSBhZGQoKytyKTsKICAgICAgICB3aGlsZSAobCA8IEwpIHJlbW92ZShsKyspOwogICAgICAgIHdoaWxlIChyID4gUikgcmVtb3ZlKHIrKyk7CgogICAgICAgIHJlc3VsdFtQXSA9IGNudDsKICAgIH0KCiAgICBmb3IgKGludCBpID0gMDsgaSA8IHE7ICsraSkgY291dCA8PCByZXN1bHRbaV0gPDwgJ1xuJzsKCiAgICByZXR1cm4gMDsKfQ==