Guest User

a.cpp

a guest
Oct 25th, 2025
37
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.26 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. #define f first
  3. #define s second
  4. using namespace std;
  5. const int MAXN = 2e5 + 10;
  6. int a[MAXN], cnt_val[MAXN], cnt;
  7. pair <pair <int, int>, pair <int, int> > b[MAXN];
  8. void add(int pos){
  9.     cnt_val[a[pos]]++;
  10.     if (cnt_val[a[pos]] == 1){
  11.         cnt++;
  12.     }
  13. }
  14. void del(int pos){
  15.     cnt_val[a[pos]]--;
  16.     if (cnt_val[a[pos]] == 0){
  17.         cnt--;
  18.     }
  19. }
  20. int main()
  21. {
  22.     int n, m;
  23.     cin >> n >> m;
  24.  
  25.     for (int i = 0; i < n; i++){
  26.         cin >> a[i];
  27.     }
  28.     int len = sqrt(n);
  29.     for (int i = 0; i < m; i++){
  30.         int l, r;
  31.         cin >> l >> r;
  32.         b[i].f.f = l / len;
  33.         b[i].f.s = r;
  34.         b[i].s.f = l;
  35.         b[i].s.s = i;
  36.     }
  37.     sort(b, b + m);
  38.     int left, right;
  39.     left = 0;
  40.     right = -1;
  41.     ans = 0;
  42.     cnt = 0;
  43.     for (int i = 0; i < m; i++){
  44.         while (right < b[i].f.s){
  45.             right++;
  46.             add(right);
  47.         }
  48.         while (left > b[i].s.f){
  49.             left--;
  50.             add(left);
  51.         }
  52.         while (right > b[i].f.s){
  53.             del(right);
  54.             right--;
  55.         }
  56.  
  57.         while (left < b[i].s.f){
  58.             del(left);
  59.             left++;
  60.         }
  61.         ans[b[i].s.s] = cnt;
  62.     }
  63.  
  64.  
  65.     return 0;
  66. }
  67.  
  68.  
Advertisement
Add Comment
Please, Sign In to add comment