Advertisement
Guest User

Untitled

a guest
Dec 21st, 2020
141
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.47 KB | None | 0 0
  1. #include <iostream>
  2. #include <algorithm>
  3. #include <vector>
  4. #include <utility>
  5. #include <cmath>
  6. #define maxn 100005
  7. using namespace std;
  8. int cnt[maxn], cc[maxn], a[maxn];
  9. int cur = 0;
  10. struct que{
  11.     int l, r, k, ind;
  12.     que(int a, int b, int c, int d) {
  13.         l = a, r = b, k = c, ind = d;
  14.     }
  15.     que() {
  16.         l = 0, r = 0, k = 0, ind = 0;
  17.     }
  18. };
  19. bool cmp(que a, que b) {
  20.     return a.r < b.r;
  21. }
  22. void add(int ind) {
  23.     cc[cnt[a[ind]]]--;
  24.     cnt[a[ind]]++;
  25.     cc[cnt[a[ind]]]++;
  26.     cur = max(cur, cnt[a[ind]]);
  27. }
  28. void del(int ind) {
  29.     cc[cnt[a[ind]]]--;
  30.     cnt[a[ind]]--;
  31.     cc[cnt[a[ind]]]++;
  32.     if (cc[cur] == 0) cur--;
  33. }
  34. int main() {
  35.     int n, q;
  36.     cin >> n >> q;
  37.     int ans[q];
  38.     int block = int(ceil(sqrt(n)));
  39.     for (int i = 0;i < n;i++) cin >> a[i], a[i]--;
  40.     vector<que> v[block];
  41.     for (int i = 0;i < q;i++) {
  42.         int l, r, k;
  43.         cin >> l >> r;
  44.         l--, r--;
  45.         v[l / block].push_back(que(l, r, 0, i));
  46.     }
  47.     int curl = 0, curr = -1;
  48.     cc[0] = n;
  49.     for (int i = 0;i < block;i++) {
  50.         sort(v[i].begin(), v[i].end(), cmp);
  51.         for (auto j:v[i]) {
  52.             while (curr < j.r) {
  53.                 curr++;
  54.                 add(curr);
  55.             }
  56.             while (curl > j.l) {
  57.                 curl--;
  58.                 add(curl);
  59.             }
  60.             while (curr > j.r) {
  61.                 del(curr);
  62.                 curr--;
  63.             }
  64.             while (curl < j.l) {
  65.                 del(curl);
  66.                 curl++;
  67.             }
  68.             //for (int k = 0;k <= cur;k++) cout << cc[k] << " ";
  69.             //cout << endl;
  70.             //ans[j.ind] = (cur * j.k >= j.r - j.l + 1 ? 1 : 0);
  71.             ans[j.ind] = cur;
  72.         }
  73.     }
  74.     for (int i = 0;i < q;i++) cout << ans[i] << "\n";
  75.  
  76. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement