Advertisement
Guest User

Untitled

a guest
Apr 19th, 2021
2,925
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.96 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. int a[300005],tree[1200005];
  4. vector<int> v[300005];
  5. int cnt(int l,int r,int c)
  6. {
  7.     return upper_bound(v[c].begin(),v[c].end(),r)-lower_bound(v[c].begin(),v[c].end(),l);
  8. }
  9. void build(int node,int st,int en)
  10. {
  11.     if (st==en)
  12.     tree[node]=a[st];
  13.     else
  14.     {
  15.         int mid=(st+en)/2;
  16.         build(2*node,st,mid);
  17.         build(2*node+1,mid+1,en);
  18.         tree[node]=(cnt(st,en,tree[2*node])>cnt(st,en,tree[2*node+1])? tree[2*node]:tree[2*node+1]);
  19.     }
  20. }
  21. int query(int node,int st,int en,int l,int r)
  22. {
  23.     if (en<l || st>r || r<l)
  24.     return 0;
  25.     if (l<=st && en<=r)
  26.     return cnt(l,r,tree[node]);
  27.     int mid=(st+en)/2;
  28.     return max(query(2*node,st,mid,l,r),query(2*node+1,mid+1,en,l,r));
  29. }
  30. int main()
  31. {
  32.     int n,q;
  33.     scanf("%d%d",&n,&q);
  34.     for (int i=1;i<=n;i++)
  35.     {
  36.         scanf("%d",&a[i]);
  37.         v[a[i]].push_back(i);
  38.     }
  39.     build(1,1,n);
  40.     while (q--)
  41.     {
  42.         int l,r;
  43.         scanf("%d%d",&l,&r);
  44.         printf("%d\n",max(1,2*query(1,1,n,l,r)-(r-l+1)));
  45.     }
  46. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement