10pts,#1 没过,但是本地自测过了。
怀疑是不同测试环境的锅。
#include <bits/stdc++.h>
#define int long long
using namespace std;
inline int read(){
int now=0,nev=1;char c=getchar();
while(c<'0'||c>'9'){if(c=='-')nev=-1;c=getchar();}
while(c>='0'&&c<='9'){now=(now<<1)+(now<<3)+(c&15);c=getchar(); }
return now*nev;
}
const int N = 5e5 + 5, lim = 2e5;
int S, a[N], n, m, ans[N];
int s[N], L, R, sum = 0;
int b[N], cnt[N], sz;
int now = 0, nw = 0;
int pos(int x){ return (x - 1) / S + 1; }
struct query{
int l, r;
int id;
bool operator < (const query &Q) const{
if (pos(l) != pos(Q.l)) return pos(l) < pos(Q.l);
return r < Q.r;
}
} q[N];
void add(int x){
int kl = cnt[a[x]]; cnt[a[x]] ++;
s[kl] --, s[kl + 1] ++;
if (kl + 1 > nw) nw = kl + 1;
}
void del(int x){
int kl = cnt[a[x]]; cnt[a[x]] --;
s[kl] --, s[kl - 1] ++;
if (s[kl] == 0 && nw == kl) nw = kl - 1;
}
signed main()
{
n = read(), m = read();
S = sqrt(n);
for (int i = 1; i <= n; i ++)
b[i] = a[i] = read();
for (int i = 1; i <= m; i ++)
q[i].l = read(), q[i].r = read(), q[i].id = i;
sort(b + 1, b + n + 1);
sz = unique(b + 1, b + n + 1) - (b + 1);
for (int i = 1; i <= n; i ++)
a[i] = lower_bound(b + 1, b + sz + 1, a[i]) - b;
sort(q + 1, q + m + 1);
L = 1, R = 0;
for (int i = 1; i <= m; i ++){
int ql = q[i].l, qr = q[i].r;
while (L < ql) del(L ++);
while (R < qr) add(++ R);
while (L > ql) add(-- L);
while (R > qr) del(R --);
ans[q[i].id] = -nw;
}
for (int i = 1; i <= m; i ++)
cout << ans[i] << "\n";
return 0;
}