蒟蒻求助,样例没过
查看原帖
蒟蒻求助,样例没过
236416
_stOrz_楼主2021/12/11 21:09
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N = 1e5 + 5;
int tree[N << 2], tag[N << 2], a[N], Pre[N << 2], Nxt[N << 2], before[N << 2], after[N << 2];
void pushup(int cur){
	int num;
	if(before[cur << 1 | 1] != after[cur << 1]) num = Pre[cur << 1 | 1] + Nxt[cur << 1];
	else num = max(Pre[cur << 1 | 1], Nxt[cur << 1]);
	before[cur] = before[cur << 1];
	after[cur] = after[cur << 1 | 1];
	Pre[cur] = Pre[cur << 1];
	Nxt[cur] = Nxt[cur << 1 | 1];
	tree[cur] = max(num, max(Pre[cur], max(Nxt[cur], max(tree[cur << 1], tree[cur << 1 | 1]))));
}
void build(int cur, int l, int r){
	if(l == r){
		tree[cur] = 1;
		before[cur] = after[cur] = 0;
		return;
	}
	int mid = (l + r) >> 1;
	build(cur << 1, l, mid);
	build(cur << 1 | 1, mid + 1, r);
	pushup(cur);
}
void update(int cur, int l, int r, int x){
	if(l > x or r < x)return;
	if(l == r){
		if(before[cur] == 1) before[cur] = after[cur] = 0;
		else before[cur] = after[cur] = 1;
		return;
	}
	int mid = (l + r) >> 1;
	update(cur  << 1, l, mid, x);
	update(cur << 1 | 1, mid + 1, r, x);
	pushup(cur);
} 
signed main(){
	int n, m, opt, x, y, z;
	cin >> n >> m;
	build(1, 1, n);
	for(int i = 1; i <= m; i++){
		cin >> x;
		update(1, 1, n, x);
		cout << tree[1] << "\n";
	}
}

2021/12/11 21:09
加载中...