MathQ_

Untitled

Aug 6th, 2021
147
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.20 KB | None | 0 0
  1. const int k = 600;
  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.     // file_in_out
  13.  
  14.     int n, m;
  15.     cin >> n;
  16.     vector<int> a(n);
  17.     cin >> a >> m;
  18.  
  19.     vector<int> b = a;
  20.     sort(all(b));
  21.     gp_hash_table<int, int> get;
  22.     for (int i = 0; i < n; ++i) if (!get[b[i]]) get[b[i]] = i + 1;
  23.  
  24.     vector<query> querys(m);
  25.     vector<vector<query>> c(n / k + 1);
  26.     vector<int> ans(m);
  27.     cin >> querys;
  28.     for (int i = 0; i < m; ++i) {
  29.         querys[i].l--; querys[i].r--;
  30.         querys[i].i = i;
  31.         c[querys[i].l / k].push_back(querys[i]);
  32.     }
  33.  
  34.     for (int i = 0; i < sz(c); ++i) {
  35.         sort(all(c[i]), [](query q1, query q2){
  36.             return q1.r < q2.r;
  37.         });
  38.     }
  39.     for (int i = 0; i < sz(c); ++i) {
  40.         vector<int> ht(n + 1);
  41.         int l = i * k, r = i * k - 1, cnt = 0;
  42.         for (auto q : c[i]) {
  43.             while (r < q.r) {
  44.                 ++r;
  45.                 if (!ht[get[a[r]]]) ++cnt;
  46.                 ht[get[a[r]]]++;
  47.             }
  48.             while (l < q.l) {
  49.                 ht[get[a[l]]]--;
  50.                 if (!ht[get[a[l]]]) --cnt;
  51.                 ++l;
  52.             }
  53.             while (l > q.l) {
  54.                 --l;
  55.                 if (!ht[get[a[l]]]) ++cnt;
  56.                 ht[get[a[l]]]++;
  57.             }
  58.             ans[q.i] = cnt;
  59.         }
  60.     }
  61.     for (auto el : ans) cout << el << '\n';
  62.     return 0;
  63. }
Advertisement
Add Comment
Please, Sign In to add comment