/////////////////////////////////////////////////////////////////////////
// ------------------------------------------------------------------- //
// | Author: Fananhkhoi | Luong Van Chanh High School for the gifted | //
// ------------------------------------------------------------------- //
/////////////////////////////////////////////////////////////////////////
/* -------------------[ TALK LESS & DO MORE ]------------------- */
// #pragma GCC target("popcnt,lzcnt,bmi,bmi2,abm")
#include <bits/stdc++.h>
#include<ext/pb_ds/assoc_container.hpp>
#include<ext/pb_ds/tree_policy.hpp>
using namespace std;
using namespace __gnu_pbds;
#define getBit(x, k) (((x) >> (k)) & 1)
#define MASK(i) (1LL << (i))
#define int long long
//#define ll long long
#define MOD 1000000007
#define el "\n"
#define vi vector<int>
#define pii pair<int,int>
#define vii vector<pii>
#define FOU(i, l, r) for (int i = l; i <= r; i ++)
#define FOD(i, r, l) for (int i = r; i >= l; i --)
#define trav(a, x) for (auto &a : x )
#define rep(i, a, b) for (int i = a; i < (b); i ++)
//#define gcd __gcd
#define fi first
#define se second
#define MP make_pair
#define pb push_back
#define pf push_front
#define all(v) v.begin(), v.end()
#define rev(v) reverse(all(v))
#define srt(v) sort(all(v))
#define grtsrt(v) sort(all(v), greater<int>())
#define sz(x) (int) (x).size()
#define maxHeap priority_queue<int>
#define minHeap priority_queue<int, vi, greater<int>>
#define Fix(a, b) cout << fixed << setprecision((b)) << (a)
int dx[] = {};
int dy[] = {};
template<class _, class __>
bool minimize(_ &x, const __ y){
if(x > y){
x = y;
return true;
} else return false;
}
template<class _, class __>
bool maximize(_ &x, const __ y){
if(x < y){
x = y;
return true;
} else return false;
}
inline int max(int a, int b){
return (a > b) ? a : b;
}
inline int min(int a, int b){
return (a < b) ? a : b;
}
inline int __lcm(int a, int b){
return a / __gcd(a, b) * b;
}
/* --------------------[ MAIN CODE ]--------------------- */
const int MaxN = 1e6 + 50;
const int oo = 2e18;
struct Querry{
int l, r, id;
bool operator < (const Querry &P){
return l < P.l;
}
}q[MaxN];
int n, Q;
int a[MaxN];
int f[MaxN];
int st[4 * MaxN];
map<int,int> mp;
void update(int id, int l, int r, int pos, int val){
if (l > pos || r < pos){
return;
}
if (l == r){
st[id] = val;
return;
}
int mid = (l + r)/2;
update(2 * id, l, mid, pos, val);
update(2 * id + 1, mid + 1, r, pos, val);
st[id] = st[2 * id] + st[2 * id + 1];
}
int get(int id, int l, int r, int u, int v){
if (u <= l && v >= r){
return st[id];
}
if (v < l || u > r || u > v){
return 0;
}
int mid = (l + r)/2;
return get(2 * id, l, mid, u, v) +
get(2 * id + 1, mid + 1, r, u, v);
}
void prepare(){
for (pair<int,int> ii : mp){
update(1, 1, n, ii.se, 1);
}
}
int ans[MaxN];
void inp(){
cin >> n;
for (int i = 1; i <= n; i ++){
cin >> a[i];
}
cin >> Q;
for (int i = 1; i <= Q; i ++){
cin >> q[i].l >> q[i].r;
}
for (int i = 1; i <= Q; i ++){
q[i].id = i;
}
}
void sol(){
for (int i = n; i >= 1; i --){
if (mp.find(a[i]) != mp.end()){
f[i] = mp[a[i]];
}
else f[i] = -1;
mp[a[i]] = i;
}
prepare();
sort(q + 1, q + 1 + Q);
int p = 1;
for (int i = 1; i <= Q; i ++){
while(p < q[i].l){
if (f[p] != - 1){
update(1, 1, n, f[p], 1);
update(1, 1, n, p, -1);
}
p ++;
}
ans[q[i].id] = get(1, 1, n, q[i].l, q[i].r);
}
for (int i = 1; i <= Q; i ++){
cout << ans[i] << el;
}
}
int32_t main()
{
ios_base::sync_with_stdio(false);
cin.tie(NULL);
freopen("cau4.inp", "r", stdin);
freopen("cau4.out", "w", stdout);
int t = 1;
bool multitest = 0;
if (multitest){
cin >> t;
}
while(t--){
inp();
sol();
}
return 0;
}
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC8vCi8vIHwgQXV0aG9yOiBGYW5hbmhraG9pIHwgTHVvbmcgVmFuIENoYW5oIEhpZ2ggU2Nob29sIGZvciB0aGUgZ2lmdGVkIHwgLy8KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAvLwovLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCgoKICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tWyBUQUxLIExFU1MgJiBETyBNT1JFIF0tLS0tLS0tLS0tLS0tLS0tLS0tICovCgoKLy8gI3ByYWdtYSBHQ0MgdGFyZ2V0KCJwb3BjbnQsbHpjbnQsYm1pLGJtaTIsYWJtIikKCiNpbmNsdWRlIDxiaXRzL3N0ZGMrKy5oPgojaW5jbHVkZTxleHQvcGJfZHMvYXNzb2NfY29udGFpbmVyLmhwcD4KI2luY2x1ZGU8ZXh0L3BiX2RzL3RyZWVfcG9saWN5LmhwcD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKdXNpbmcgbmFtZXNwYWNlIF9fZ251X3BiZHM7CgojZGVmaW5lIGdldEJpdCh4LCBrKSAoKCh4KSA+PiAoaykpICYgMSkKI2RlZmluZSBNQVNLKGkpICgxTEwgPDwgKGkpKQojZGVmaW5lIGludCBsb25nIGxvbmcKLy8jZGVmaW5lIGxsIGxvbmcgbG9uZwojZGVmaW5lIE1PRCAxMDAwMDAwMDA3CiNkZWZpbmUgZWwgIlxuIgojZGVmaW5lIHZpIHZlY3RvcjxpbnQ+CiNkZWZpbmUgcGlpIHBhaXI8aW50LGludD4KI2RlZmluZSB2aWkgdmVjdG9yPHBpaT4KI2RlZmluZSBGT1UoaSwgbCwgcikgZm9yIChpbnQgaSA9IGw7IGkgPD0gcjsgaSArKykKI2RlZmluZSBGT0QoaSwgciwgbCkgZm9yIChpbnQgaSA9IHI7IGkgPj0gbDsgaSAtLSkKI2RlZmluZSB0cmF2KGEsIHgpIGZvciAoYXV0byAmYSA6IHggKQojZGVmaW5lIHJlcChpLCBhLCBiKSBmb3IgKGludCBpID0gYTsgaSA8IChiKTsgaSArKykKLy8jZGVmaW5lIGdjZCBfX2djZAojZGVmaW5lIGZpIGZpcnN0CiNkZWZpbmUgc2Ugc2Vjb25kCiNkZWZpbmUgTVAgbWFrZV9wYWlyCiNkZWZpbmUgcGIgcHVzaF9iYWNrCiNkZWZpbmUgcGYgcHVzaF9mcm9udAojZGVmaW5lIGFsbCh2KSB2LmJlZ2luKCksIHYuZW5kKCkKI2RlZmluZSByZXYodikgcmV2ZXJzZShhbGwodikpCiNkZWZpbmUgc3J0KHYpIHNvcnQoYWxsKHYpKQojZGVmaW5lIGdydHNydCh2KSBzb3J0KGFsbCh2KSwgZ3JlYXRlcjxpbnQ+KCkpCiNkZWZpbmUgc3ooeCkgKGludCkgKHgpLnNpemUoKQojZGVmaW5lIG1heEhlYXAgcHJpb3JpdHlfcXVldWU8aW50PgojZGVmaW5lIG1pbkhlYXAgcHJpb3JpdHlfcXVldWU8aW50LCB2aSwgZ3JlYXRlcjxpbnQ+PgojZGVmaW5lIEZpeChhLCBiKSBjb3V0IDw8IGZpeGVkIDw8IHNldHByZWNpc2lvbigoYikpIDw8IChhKQoKaW50IGR4W10gPSB7fTsKaW50IGR5W10gPSB7fTsKCnRlbXBsYXRlPGNsYXNzIF8sIGNsYXNzIF9fPgogICAgYm9vbCBtaW5pbWl6ZShfICZ4LCBjb25zdCBfXyB5KXsKICAgICAgICBpZih4ID4geSl7CiAgICAgICAgICAgIHggPSB5OwogICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9IGVsc2UgcmV0dXJuIGZhbHNlOwogICAgfQp0ZW1wbGF0ZTxjbGFzcyBfLCBjbGFzcyBfXz4KICAgIGJvb2wgbWF4aW1pemUoXyAmeCwgY29uc3QgX18geSl7CiAgICAgICAgaWYoeCA8IHkpewogICAgICAgICAgICB4ID0geTsKICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfSBlbHNlIHJldHVybiBmYWxzZTsKICAgIH0KCmlubGluZSBpbnQgbWF4KGludCBhLCBpbnQgYil7CiAgICByZXR1cm4gKGEgPiBiKSA/IGEgOiBiOwp9CgppbmxpbmUgaW50IG1pbihpbnQgYSwgaW50IGIpewogICAgcmV0dXJuIChhIDwgYikgPyBhIDogYjsKfQoKaW5saW5lIGludCBfX2xjbShpbnQgYSwgaW50IGIpewogICAgcmV0dXJuIGEgLyBfX2djZChhLCBiKSAqIGI7Cn0KCgoJLyogLS0tLS0tLS0tLS0tLS0tLS0tLS1bIE1BSU4gQ09ERSBdLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCmNvbnN0IGludCBNYXhOID0gMWU2ICsgNTA7CmNvbnN0IGludCBvbyA9IDJlMTg7CgpzdHJ1Y3QgUXVlcnJ5ewogICAgaW50IGwsIHIsIGlkOwogICAgYm9vbCBvcGVyYXRvciA8IChjb25zdCBRdWVycnkgJlApewogICAgICAgIHJldHVybiBsIDwgUC5sOwogICAgfQp9cVtNYXhOXTsKCmludCBuLCBROwppbnQgYVtNYXhOXTsKaW50IGZbTWF4Tl07CmludCBzdFs0ICogTWF4Tl07Cm1hcDxpbnQsaW50PiBtcDsKCnZvaWQgdXBkYXRlKGludCBpZCwgaW50IGwsIGludCByLCBpbnQgcG9zLCBpbnQgdmFsKXsKICAgIGlmIChsID4gcG9zIHx8IHIgPCBwb3MpewogICAgICAgIHJldHVybjsKICAgIH0KICAgIGlmIChsID09IHIpewogICAgICAgIHN0W2lkXSA9IHZhbDsKICAgICAgICByZXR1cm47CiAgICB9CiAgICBpbnQgbWlkID0gKGwgKyByKS8yOwogICAgdXBkYXRlKDIgKiBpZCwgbCwgbWlkLCBwb3MsIHZhbCk7CiAgICB1cGRhdGUoMiAqIGlkICsgMSwgbWlkICsgMSwgciwgcG9zLCB2YWwpOwogICAgc3RbaWRdID0gc3RbMiAqIGlkXSArIHN0WzIgKiBpZCArIDFdOwp9CgppbnQgZ2V0KGludCBpZCwgaW50IGwsIGludCByLCBpbnQgdSwgaW50IHYpewogICAgaWYgKHUgPD0gbCAmJiB2ID49IHIpewogICAgICAgIHJldHVybiBzdFtpZF07CiAgICB9CiAgICBpZiAodiA8IGwgfHwgdSA+IHIgfHwgdSA+IHYpewogICAgICAgIHJldHVybiAwOwogICAgfQogICAgaW50IG1pZCA9IChsICsgcikvMjsKICAgIHJldHVybiBnZXQoMiAqIGlkLCBsLCBtaWQsIHUsIHYpICsKICAgICAgICAgICBnZXQoMiAqIGlkICsgMSwgbWlkICsgMSwgciwgdSwgdik7Cn0KCnZvaWQgcHJlcGFyZSgpewogICAgZm9yIChwYWlyPGludCxpbnQ+IGlpIDogbXApewogICAgICAgIHVwZGF0ZSgxLCAxLCBuLCBpaS5zZSwgMSk7CiAgICB9Cn0KCmludCBhbnNbTWF4Tl07Cgp2b2lkIGlucCgpewogICAgY2luID4+IG47CiAgICBmb3IgKGludCBpID0gMTsgaSA8PSBuOyBpICsrKXsKICAgICAgICBjaW4gPj4gYVtpXTsKICAgIH0KICAgIGNpbiA+PiBROwogICAgZm9yIChpbnQgaSA9IDE7IGkgPD0gUTsgaSArKyl7CiAgICAgICAgY2luID4+IHFbaV0ubCA+PiBxW2ldLnI7CiAgICB9CiAgICBmb3IgKGludCBpID0gMTsgaSA8PSBROyBpICsrKXsKICAgICAgICBxW2ldLmlkID0gaTsKICAgIH0KfQoKdm9pZCBzb2woKXsKICAgIGZvciAoaW50IGkgPSBuOyBpID49IDE7IGkgLS0pewogICAgICAgIGlmIChtcC5maW5kKGFbaV0pICE9IG1wLmVuZCgpKXsKICAgICAgICAgICAgZltpXSA9IG1wW2FbaV1dOwogICAgICAgIH0KICAgICAgICBlbHNlIGZbaV0gPSAtMTsKICAgICAgICBtcFthW2ldXSA9IGk7CiAgICB9CiAgICBwcmVwYXJlKCk7CiAgICBzb3J0KHEgKyAxLCBxICsgMSArIFEpOwoKICAgIGludCBwID0gMTsKICAgIGZvciAoaW50IGkgPSAxOyBpIDw9IFE7IGkgKyspewogICAgICAgIHdoaWxlKHAgPCBxW2ldLmwpewogICAgICAgICAgICBpZiAoZltwXSAhPSAtIDEpewogICAgICAgICAgICAgICAgdXBkYXRlKDEsIDEsIG4sIGZbcF0sIDEpOwogICAgICAgICAgICAgICAgdXBkYXRlKDEsIDEsIG4sIHAsIC0xKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBwICsrOwogICAgICAgIH0KICAgICAgICBhbnNbcVtpXS5pZF0gPSBnZXQoMSwgMSwgbiwgcVtpXS5sLCBxW2ldLnIpOwogICAgfQogICAgZm9yIChpbnQgaSA9IDE7IGkgPD0gUTsgaSArKyl7CiAgICAgICAgY291dCA8PCBhbnNbaV0gPDwgZWw7CiAgICB9Cn0KCmludDMyX3QgbWFpbigpCnsKICAgIGlvc19iYXNlOjpzeW5jX3dpdGhfc3RkaW8oZmFsc2UpOwogICAgY2luLnRpZShOVUxMKTsKCiAgICBmcmVvcGVuKCJjYXU0LmlucCIsICJyIiwgc3RkaW4pOwogICAgZnJlb3BlbigiY2F1NC5vdXQiLCAidyIsIHN0ZG91dCk7CgogICAgaW50IHQgPSAxOwogICAgYm9vbCBtdWx0aXRlc3QgPSAwOwogICAgaWYgKG11bHRpdGVzdCl7CiAgICAgICAgY2luID4+IHQ7CiAgICB9CiAgICB3aGlsZSh0LS0pewogICAgICAgIGlucCgpOwogICAgICAgIHNvbCgpOwogICAgfQogICAgcmV0dXJuIDA7Cn0K