Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- #define all(x) x.begin(), x.end()
- #define f(i,a,b) for(int i = (a); i <= (b); i++)
- #define pb push_back
- #define pii pair<int,int>
- struct Query
- {
- int l,r,id;
- Query(int p1, int p2, int p3) : l(p1), r(p2), id(p3) {};
- friend bool operator < (Query q1, Query q2)
- {
- if(q1.l/200 != q2.l/200) return q1.l/200 < q2.l/200;
- return q1.r < q2.r;
- }
- };
- int A[30005], Ans[200005], C[1000005], N, Q;
- vector<Query> Queries;
- int main()
- {
- cin >> N;
- f(i,1,N) scanf("%d",&A[i]);
- cin >> Q;
- f(i,1,Q)
- {
- int l,r;
- scanf("%d%d",&l,&r);
- Queries.pb(Query(l,r,i));
- }
- sort(all(Queries));
- int ans = 0, a = 0, b = 0;
- for(Query q : Queries)
- {
- int l = q.l, r = q.r, id = q.id;
- while(b < r)
- {
- C[A[++b]]++;
- if(C[A[b]] == 1) ans++;
- }
- while(b > r)
- {
- if(C[A[b]] == 1) ans--;
- C[A[b--]]--;
- }
- while(a > l)
- {
- C[A[--a]]++;
- if(C[A[a]] == 1) ans++;
- }
- while(a < l)
- {
- if(a>0 && C[A[a]] == 1) ans--;
- C[A[a++]]--;
- }
- Ans[id] = ans;
- }
- f(i,1,Q) printf("%d\n", Ans[i]);
- }
Advertisement
Add Comment
Please, Sign In to add comment