RT。
所有的数据点都满足 n=m。使得下面这份代码过了。
#include<bits/stdc++.h>
using namespace std;
namespace IO{
template<typename T>inline bool read(T &x){
x=0;
char ch=getchar();
bool flag=0,ret=0;
while(ch<'0'||ch>'9') flag=flag||(ch=='-'),ch=getchar();
while(ch>='0'&&ch<='9') x=x*10+ch-'0',ch=getchar(),ret=1;
x=flag?-x:x;
return ret;
}
template<typename T,typename ...Args>inline bool read(T& a,Args& ...args){
return read(a)&&read(args...);
}
template<typename T>void prt(T x){
if(x>9) prt(x/10);
putchar(x%10+'0');
}
template<typename T>inline void put(T x){
if(x<0) putchar('-'),x=-x;
prt(x);
}
template<typename T>inline void put(char ch,T x){
if(x<0) putchar('-'),x=-x;
prt(x);
putchar(ch);
}
template<typename T,typename ...Args>inline void put(T a,Args ...args){
put(a);
put(args...);
}
template<typename T,typename ...Args>inline void put(const char ch,T a,Args ...args){
put(ch,a);
put(ch,args...);
}
inline void put(string s){
for(int i=0,sz=s.length();i<sz;i++) putchar(s[i]);
}
inline void put(const char* s){
for(int i=0,sz=strlen(s);i<sz;i++) putchar(s[i]);
}
}
using namespace IO;
#define N 200005
int n,m,b[N],w[N],len,bel[N],ans[N],res,t[N],cnt[N];
struct question{
int l,r,id;
inline bool operator<(const question &b)const{
if(bel[l]!=bel[b.l]) return l<b.l;
if(bel[l]&1) return r<b.r;
return r>b.r;
}
}q[N];
inline void add(int x){
t[cnt[x]]--;
t[++cnt[x]]++;
res=max(res,cnt[x]);
}
inline void del(int x){
t[cnt[x]]--;
if(res==cnt[x]&&!t[cnt[x]]) res--;
t[--cnt[x]]++;
}
int main(){
read(n,m);
len=sqrt(n);
for(int i=1;i<=n;i++) bel[i]=(i-1)/len+1;
for(int i=1;i<=n;i++) read(w[i]),b[i]=w[i];
for(int i=1;i<=m;i++)
read(q[i].l,q[i].r),q[i].id=i;
sort(b+1,b+n+1),sort(q+1,q+m+1);
int t=unique(b+1,b+n+1)-b-1;
for(int i=1;i<=n;i++) w[i]=lower_bound(b+1,b+t+1,w[i])-b;
for(int i=1,l=1,r=0;i<=m;i++){
int L=q[i].l,R=q[i].r;
while(l>L) add(w[--l]);
while(r<R) add(w[++r]);
while(l<L) del(w[l++]);
while(r>R) del(w[r--]);
ans[q[i].id]=res;
}
for(int i=1;i<=n/*bug,显然应该是n*/;i++)
put('\n',-ans[i]);
return 0;
}