1 #include<iostream> 2 #include<string> 3 #include<queue> 4 #include<stack> 5 #include<vector> 6 #include<map> 7 #include<cstdio> 8 #include<cstdlib> 9 #include<algorithm> 10 #include<set> 11 #include<iomanip> 12 #include<cstring> 13 #include<cmath> 14 #include<limits> 15 using namespace std; 16 17 #define au auto 18 #define debug(i) cout<<"debug: "<<i<<endl 19 #define mfor(i,a,b) for(register int i=(a);i<=(b);i++) 20 #define mrep(i,a,b) for(register int i=(a);i>=(b);i--) 21 #define LLL __int128 22 #define Re register 23 #define il inline 24 #define mem(a,b) memset(a,(b),sizeof(a)) 25 typedef pair<int, int> intpair; 26 typedef long long int LL; 27 const int INF = 0x3f3f3f3f; 28 const int INFLL = 0x3f3f3f3f3f3f3f3f; 29 30 int n; 31 const int maxn = 1000010; 32 int a[maxn]; 33 int tr[maxn]; 34 35 inline int lowbit(int x) 36 { 37 return x & (-x); 38 } 39 40 inline void updata(int x, int k) 41 { 42 while (x <= n) 43 { 44 tr[x] += k; 45 x += lowbit(x); 46 } 47 } 48 49 inline int get_sum(int x) 50 { 51 int res = 0; 52 while (x > 0) 53 { 54 res += tr[x]; 55 x -= lowbit(x); 56 } 57 return res; 58 } 59 60 struct Query 61 { 62 int l, r; 63 int i; 64 bool operator<(Query s) 65 { 66 return r < s.r; 67 } 68 }q[maxn]; 69 70 int m; 71 int mark[maxn]; 72 int ans[maxn]; 73 74 int main() 75 { 76 ios::sync_with_stdio(0); 77 cin.tie(0); 78 cout.tie(0); 79 cin >> n; 80 mfor(i, 1, n) cin >> a[i]; 81 cin >> m; 82 mfor(i, 1, m) 83 { 84 cin >> q[i].l >> q[i].r; 85 q[i].i = i; 86 } 87 sort(q + 1, q + 1 + m); 88 int nxt = 1; 89 mfor(i, 1, m) 90 { 91 mfor(j, nxt, q[i].r) 92 { 93 if (mark[a[j]]) updata(mark[a[j]], -1); 94 updata(j, 1); 95 mark[a[j]] = j; 96 } 97 nxt = q[i].r + 1; 98 ans[q[i].i] = get_sum(q[i].r) - get_sum(q[i].l - 1); 99 } 100 mfor(i, 1, m) cout << ans[i] << endl; 101 return 0; 102 }