Advertisement
MathQ_

Untitled

Aug 6th, 2021
145
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.00 KB | None | 0 0
  1. const int k = 548;
  2. struct query { int l, r, i; };
  3.  
  4. istream& operator>>(istream &in, query &q) {
  5.     in >> q.l >> q.r;
  6.     return in;
  7. }
  8.  
  9. int main() {
  10.     fast
  11.     // file_in
  12.  
  13.     int n, m;
  14.     cin >> n;
  15.     vector<int> a(n);
  16.     cin >> a >> m;
  17.     vector<query> qq(m);
  18.     vector<vector<query>> b(n / k + 1);
  19.     vector<int> ans(m);
  20.     cin >> qq;
  21.     for (int i = 0; i < m; ++i) {
  22.         qq[i].l--; qq[i].r--; qq[i].i = i;
  23.         b[qq[i].l / k].push_back(qq[i]);
  24.     }
  25.  
  26.     for (int i = 0; i < sz(b); ++i) {
  27.         sort(all(b[i]), [](query q1, query q2){
  28.             return q1.r < q2.r;
  29.         });
  30.     }
  31.     for (int i = 0; i < sz(b); ++i) {
  32.         gp_hash_table<int, int> ht;
  33.         int l = i * k, r = i * k - 1, cnt = 0;
  34.         for (auto q : b[i]) {
  35.             while (r < q.r) {
  36.                 ++r;
  37.                 if (!ht[a[r]]) ++cnt;
  38.                 ht[a[r]]++;
  39.             }
  40.             while (l < q.l) {
  41.                 ht[a[l]]--;
  42.                 if (!ht[a[l]]) --cnt;
  43.                 ++l;
  44.             }
  45.             while (l > q.l) {
  46.                 --l;
  47.                 if (!ht[a[l]]) ++cnt;
  48.                 ht[a[l]]++;
  49.             }
  50.             ans[q.i] = cnt;
  51.         }
  52.     }
  53.     for (auto el : ans) cout << el << '\n';
  54.     return 0;
  55. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement