记录。
对于测试点 2,在本地的输出与答案一致,但是被判定为错误。
求大佬们看看QWQ。
#include<bits/stdc++.h>
using namespace std;
int n,m,a[200005],t,cnt[200005],now,num[200005],l=1,r,ans[200005],b[200005],temp;
struct node{
int l,r,id;
}q[200005];
bool cmp(node x,node y){
if((x.l/t)==(y.l/t)){
if((x.l/t)%2) return x.r<y.r;
else return x.r>y.r;
}
else return x.l/t<y.l/t;
}
void add(int x){
num[cnt[a[x]]]--;
cnt[a[x]]++;
num[cnt[a[x]]]++;
now=max(now,cnt[a[x]]);
}
void del(int x){
num[cnt[a[x]]]--;
if(now==cnt[a[x]] && !num[cnt[a[x]]]) now--;
cnt[a[x]]--;
num[cnt[a[x]]]++;
}
signed main(){
ios::sync_with_stdio(false);
cin>>n>>m;
t=sqrt(n);
for(int i=1;i<=n;i++){
cin>>a[i];
b[i]=a[i];
}
sort(b+1,b+1+n);
temp=unique(b+1,b+1+n)-b-1;
for(int i=1;i<=n;i++){
a[i]=lower_bound(b+1,b+1+temp,a[i])-b;
}
for(int i=1;i<=m;i++){
cin>>q[i].l>>q[i].r;
q[i].id=i;
}
sort(q+1,q+1+m,cmp);
for(int i=1;i<=m;i++){
while(l<q[i].l) del(l++);
while(l>q[i].l) add(--l);
while(r<q[i].r) add(++r);
while(r>q[i].r) del(r--);
ans[q[i].id]=now;
}
for(int i=1;i<=m;i++) cout<<-ans[i]<<endl;
return 0;
}