AC了1个点,其他全RE。。。
蜜汁RE。
求大佬帮忙看看:
#include <bits/stdc++.h>
#define ll int
using namespace std;
const int MAXN = 2e5 + 5;
int n, m, k, b, now;
int L, R;
int A[MAXN];
int cnt[MAXN], t[MAXN];
int ans[MAXN];
struct RANGE{
int l, r, v;
}range[MAXN];
int cmp(struct RANGE x, struct RANGE y)
{
if(x.l / b == y.l / b) return x.r < y.r;
else return x.l / b < y.l / b;
}
void add(int x)
{
t[cnt[x]]--;
cnt[x]++;
t[cnt[x]]++;
now = max(now, cnt[x]);
}
void del(int x)
{
t[cnt[x]]--;
if(now == cnt[x] && t[cnt[x]] == 0) now--;
cnt[x]--;
t[cnt[x]]++;
}
int main()
{
scanf("%d%d", &n, &m);
for(int i=1; i<=n; i++) scanf("%d", &A[i]);
for(int i=1; i<=m; i++) scanf("%d%d", &range[i].l, &range[i].r), range[i].v = i;
b = sqrt(n), L = 1, R = 0;
sort(range+1, range+m+1, cmp);
for(int i=1; i<=m; i++){
while(L < range[i].l) del(A[L]), L++;
while(R < range[i].r) R++, add(A[R]);
while(L > range[i].l) L--, add(A[L]);
while(R > range[i].r) del(A[R]), R--;
ans[range[i].v] = now;
}
for(int i=1; i<=m; i++) printf("-%d\n", ans[i]);
return 0;
}