RE求助
查看原帖
RE求助
232838
huangkx楼主2021/6/10 21:42

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;
}
2021/6/10 21:42
加载中...