Advertisement
Ethan-ZYF

Untitled

Sep 17th, 2023
641
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.51 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. using i64 = long long;
  4.  
  5. void solve() {
  6.     int N, Q;
  7.     cin >> N;
  8.  
  9.     vector<int> A(N);
  10.     for (int i = 0; i < N; i++) {
  11.         cin >> A[i];
  12.     }
  13.     const int M = *max_element(A.begin(), A.end()) + 1;
  14.  
  15.     vector<int> freq(M);
  16.     const int B = sqrtl(N);
  17.     cin >> Q;
  18.     vector<array<int, 3>> query(Q);
  19.     for (int i = 0; i < Q; i++) {
  20.         int l, r;
  21.         cin >> l >> r;
  22.         l--;
  23.         query[i] = {l, r, i};
  24.     }
  25.     sort(query.begin(), query.end(), [&](auto a, auto b) {
  26.         if (a[0] / B != b[0] / B) {
  27.             return a[0] < b[0];
  28.         } else {
  29.             return a[1] < b[1];
  30.         }
  31.     });
  32.     i64 res = 0;
  33.     vector<i64> ans(Q);
  34.  
  35.     auto add = [&](int x) {
  36.         res += freq[x] == 0;
  37.         freq[x] += 1;
  38.     };
  39.     auto del = [&](int x) {
  40.         freq[x] -= 1;
  41.         res -= freq[x] == 0;
  42.     };
  43.  
  44.     int L = 0, R = 0;
  45.     for (auto [l, r, i] : query) {
  46.         while (R < r) {
  47.             add(A[R++]);
  48.         }
  49.         while (L > l) {
  50.             add(A[--L]);
  51.         }
  52.         while (R > r) {
  53.             del(A[--R]);
  54.         }
  55.         while (L < l) {
  56.             del(A[L++]);
  57.         }
  58.         ans[i] = res;
  59.     }
  60.     for (int i = 0; i < Q; i++) {
  61.         cout << ans[i] << "\n";
  62.     }
  63. }
  64.  
  65. int main() {
  66.     ios::sync_with_stdio(false);
  67.     cin.tie(nullptr);
  68.  
  69.     int T = 1;
  70.     // cin >> T;
  71.     for (int Task = 1; Task <= T; Task++) {
  72.         solve();
  73.     }
  74.  
  75.     return 0;
  76. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement