AC代码:
#include <bits/stdc++.h>
//#define int long long
#define x first
#define y second
using namespace std;
typedef pair<int,int> PII;
const int N=4e5+6;
int n,m,len;
int w[N],ans[N];
int cnt[N],num[N];
struct node{
int id,l,r;
}q[N];
int get(int x){
return x/len;
}
bool cmp(node a,node b){
if(get(a.l)!=get(b.l)) return get(a.l)<get(b.l);
return a.r<b.r;
}
void add(int x,int &res){
int k=cnt[x];
cnt[x]++;
num[k]--;
num[k+1]++;
res=max(res,cnt[x]);
}
void del(int x,int &res){
int k=cnt[x];
cnt[x]--;
num[k]--;
num[k-1]++;
if(res==k&&num[k]==0)res--;
}
main(){
cin>>n>>m,len=sqrt(n);
for(int i=1;i<=n;i++)cin>>w[i];
for(int i=0;i<m;i++){
int l,r;
cin>>l>>r;
q[i]={i,l,r};
}
sort(q,q+m,cmp);
int res=0;
for(int k=0,i=0,j=1;k<m;k++){
int id=q[k].id,l=q[k].l,r=q[k].r;
while(i<r)add(w[++i],res);
while(i>r)del(w[i--],res);
while(j>l)add(w[--j],res);
while(j<l)del(w[j++],res);
int other=r-l+1-res;
ans[id]=max(1,res-other);
}
for(int i=0;i<m;i++)cout<<ans[i]<<endl;
}