死活找不出来是哪里错了,一直输出1,求助巨佬
查看原帖
死活找不出来是哪里错了,一直输出1,求助巨佬
120017
JeffZhao楼主2021/7/5 09:31
#include<iostream>
#include<cstdio>
#include<algorithm>

using namespace std;

const int N = 2e5 + 10;

inline int du(void) {
	int x = 0, f = 1;
	char ch = getchar();
	while (ch > '9' || ch < '0') { if (ch == '-')f = -1; ch = getchar(); }
	while (ch >= '0' && ch <= '9') { x = x * 10 + ch - '0'; ch = getchar(); }
	return x * f;
}
inline void write(int x) {
	if (x < 0) { putchar('-'); x = -x; }
	if (x > 9)write(x / 10);
	putchar(x % 10 ^ 48);
	return;
}

int n, q;
int a[N], Max[N << 2], Lmax[N << 2], Rmax[N << 2], R[N << 2], siz[N << 2], L[N << 2];

inline void push_up(int k) {
	R[k] = R[k << 1 | 1], L[k] = L[k << 1];
	siz[k] = siz[k << 1] + siz[k << 1 | 1];
	if (Lmax[k << 1] == siz[k << 1] && R[k << 1] != L[k << 1 | 1])
		Lmax[k] = siz[k << 1] + Lmax[k << 1 | 1];
	else Lmax[k] = Lmax[k << 1];
	if (R[k << 1] != L[k << 1 | 1] && Lmax[k << 1 | 1] == siz[k << 1 | 1])
		Rmax[k] = siz[k << 1 | 1] + Rmax[k << 1];
	else Rmax[k] = Rmax[k << 1 | 1];
	Max[k] = max(Max[k << 1], Max[k << 1 | 1]);
	if (R[k << 1] != L[k << 1 | 1])
		Max[k] = max(Max[k], Rmax[k << 1] + Lmax[k << 1 | 1]);
	Max[k] = max(Max[k], max(Lmax[k], Rmax[k]));
	return;
}

inline void build(int k, int l, int r) {
	Max[k] = Lmax[k] = Rmax[k] = 1;
	if (l == r) {
		siz[k] = 1;
		R[k] = L[k] = 1;
		return;
	}
	int mid = (l + r) >> 1;
	build(k << 1, l, mid);
	build(k << 1 | 1, mid + 1, r);
	push_up(k);
	siz[k] = siz[k << 1] + siz[k << 1 | 1];
	return;
}
inline void update(int k, int l, int r, int where, int v) {
	if (l > where || r < where)
		return;
	if (l == r && l == where) {
		R[k] = L[k] = v;
		a[where] = v;
		return;
	}
	int mid = (l + r) >> 1;
	update(k << 1, l, mid, where, v);
	update(k << 1 | 1, mid + 1, r, where, v);
	push_up(k);
	return;
}

int main(void) {
	n = du(), q = du();

	for (int i = 1; i <= n; ++i)
		a[i] = 1;

	build(1, 1, n);

	for (int i = 1; i <= q; ++i) {
		int x;
		x = du();
		if (a[x] == 1)
			update(1, 1, n, x, 2);
		if(a[x] == 2) update(1, 1, n, x, 1);
		write(Max[1]);
		putchar('\n');
	}

	return 0;
}
2021/7/5 09:31
加载中...