理解不了一点
查看原帖
理解不了一点
486677
Failure_Terminator楼主2023/12/23 21:37

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;
}
2023/12/23 21:37
加载中...