#include <bits/stdc++.h>
using namespace std;
#define all(ac) ac.begin(),ac.end()
#define task "tet"
#define fi first
#define se second
#define pii pair<int,int>
#define db long double
#define int long long
struct event {
int id, l, r, pos;
bool operator <(const event o) const {
if(id != o.id) return id < o.id;
if(r != o.r) return r < o.r;
return l < o.l;
}
};
int32_t main() {
if(fopen(task".inp", "r")) {
freopen(task".inp","r",stdin);
freopen(task".out","w",stdout);
}
ios::sync_with_stdio(false);
cin.tie(0), cout.tie(0);
int n; cin >> n;
int a[n + 1];
for(int i=1;i<=n;i++) cin >> a[i];
int sz = sqrt(n);
vector <int> id(n + 5, 0);
for(int i=1, cur = 1;i<=n;i++) {
id[i] = cur;
if(i == cur * sz) cur++;
}
int Q; cin >> Q;
vector <event> qr;
for(int i=1;i<=Q;i++) {
int l, r; cin >> l >> r;
qr.push_back({id[l], l, r, i});
}
sort(all(qr));
vector <int> ans(Q + 1, 0);
int cur_r = -1, cur_l = -1;
int temp = -1;
map <int, int> cnt;
int cur_cnt = 0;
for(auto e : qr) {
if(e.id != temp) {
cnt.clear();
temp = e.id;
cur_r = e.l;
cur_l = e.l;
cnt[a[e.l]]++;
cur_cnt = 1;
}
while(cur_l < e.l) {
cnt[a[cur_l]]--;
if(cnt[a[cur_l]] == 0) cur_cnt--;
cur_l++;
}
while(cur_l > e.l) {
cur_l--;
cnt[a[cur_l]]++;
if(cnt[a[cur_l]] == 1) cur_cnt++;
}
while(cur_r < e.r) {
cur_r++;
cnt[a[cur_r]]++;
if(cnt[a[cur_r]] == 1) cur_cnt++;
}
ans[e.pos] = cur_cnt;
}
for(int i=1;i<=Q;i++) cout << ans[i] << '\n';
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CiNkZWZpbmUgYWxsKGFjKSBhYy5iZWdpbigpLGFjLmVuZCgpCiNkZWZpbmUgdGFzayAidGV0IgojZGVmaW5lIGZpIGZpcnN0CiNkZWZpbmUgc2Ugc2Vjb25kCiNkZWZpbmUgcGlpIHBhaXI8aW50LGludD4KI2RlZmluZSBkYiBsb25nIGRvdWJsZQojZGVmaW5lIGludCBsb25nIGxvbmcKCnN0cnVjdCBldmVudCB7CiAgICBpbnQgaWQsIGwsIHIsIHBvczsKICAgIGJvb2wgb3BlcmF0b3IgPChjb25zdCBldmVudCBvKSBjb25zdCB7CiAgICAgICAgaWYoaWQgIT0gby5pZCkgcmV0dXJuIGlkIDwgby5pZDsKICAgICAgICBpZihyICE9IG8ucikgcmV0dXJuIHIgPCBvLnI7CiAgICAgICAgcmV0dXJuIGwgPCBvLmw7CiAgICB9Cn07CgppbnQzMl90IG1haW4oKSB7CiAgICBpZihmb3Blbih0YXNrIi5pbnAiLCAiciIpKSB7CiAgICAgICAgZnJlb3Blbih0YXNrIi5pbnAiLCJyIixzdGRpbik7CiAgICAgICAgZnJlb3Blbih0YXNrIi5vdXQiLCJ3IixzdGRvdXQpOwogICAgfQoKICAgIGlvczo6c3luY193aXRoX3N0ZGlvKGZhbHNlKTsKICAgIGNpbi50aWUoMCksIGNvdXQudGllKDApOwoKICAgIGludCBuOyBjaW4gPj4gbjsKICAgIGludCBhW24gKyAxXTsKICAgIGZvcihpbnQgaT0xO2k8PW47aSsrKSBjaW4gPj4gYVtpXTsKICAgIGludCBzeiA9IHNxcnQobik7CgogICAgdmVjdG9yIDxpbnQ+IGlkKG4gKyA1LCAwKTsKICAgIGZvcihpbnQgaT0xLCBjdXIgPSAxO2k8PW47aSsrKSB7CiAgICAgICAgaWRbaV0gPSBjdXI7CiAgICAgICAgaWYoaSA9PSBjdXIgKiBzeikgY3VyKys7CiAgICB9CgogICAgaW50IFE7IGNpbiA+PiBROwogICAgdmVjdG9yIDxldmVudD4gcXI7CiAgICBmb3IoaW50IGk9MTtpPD1RO2krKykgewogICAgICAgIGludCBsLCByOyBjaW4gPj4gbCA+PiByOwogICAgICAgIHFyLnB1c2hfYmFjayh7aWRbbF0sIGwsIHIsIGl9KTsKICAgIH0KCiAgICBzb3J0KGFsbChxcikpOwoKICAgIHZlY3RvciA8aW50PiBhbnMoUSArIDEsIDApOwogICAgaW50IGN1cl9yID0gLTEsIGN1cl9sID0gLTE7CiAgICBpbnQgdGVtcCA9IC0xOwogICAgbWFwIDxpbnQsIGludD4gY250OwogICAgaW50IGN1cl9jbnQgPSAwOwogICAgZm9yKGF1dG8gZSA6IHFyKSB7CiAgICAgICAgaWYoZS5pZCAhPSB0ZW1wKSB7CiAgICAgICAgICAgIGNudC5jbGVhcigpOwogICAgICAgICAgICB0ZW1wID0gZS5pZDsKICAgICAgICAgICAgY3VyX3IgPSBlLmw7CiAgICAgICAgICAgIGN1cl9sID0gZS5sOwogICAgICAgICAgICBjbnRbYVtlLmxdXSsrOwogICAgICAgICAgICBjdXJfY250ID0gMTsKICAgICAgICB9CiAgICAgICAgd2hpbGUoY3VyX2wgPCBlLmwpIHsKICAgICAgICAgICAgY250W2FbY3VyX2xdXS0tOwogICAgICAgICAgICBpZihjbnRbYVtjdXJfbF1dID09IDApIGN1cl9jbnQtLTsKICAgICAgICAgICAgY3VyX2wrKzsKICAgICAgICB9CiAgICAgICAgd2hpbGUoY3VyX2wgPiBlLmwpIHsKICAgICAgICAgICAgY3VyX2wtLTsKICAgICAgICAgICAgY250W2FbY3VyX2xdXSsrOwogICAgICAgICAgICBpZihjbnRbYVtjdXJfbF1dID09IDEpIGN1cl9jbnQrKzsKICAgICAgICB9CgogICAgICAgIHdoaWxlKGN1cl9yIDwgZS5yKSB7CiAgICAgICAgICAgIGN1cl9yKys7CiAgICAgICAgICAgIGNudFthW2N1cl9yXV0rKzsKICAgICAgICAgICAgaWYoY250W2FbY3VyX3JdXSA9PSAxKSBjdXJfY250Kys7CiAgICAgICAgfQoKICAgICAgICBhbnNbZS5wb3NdID0gY3VyX2NudDsKICAgIH0KCiAgICBmb3IoaW50IGk9MTtpPD1RO2krKykgY291dCA8PCBhbnNbaV0gPDwgJ1xuJzsKICAgIHJldHVybiAwOwp9