线段树RE & 0分求调
查看原帖
线段树RE & 0分求调
481337
FwbAway楼主2024/9/20 09:40

找不到问题了,求大佬帮助

#include <bits/stdc++.h>
using namespace std;
const int N = 110000;
int n, m;
int id, x, y;
int a[N];
struct Tree {
	int l, r;
	int lz;
} tree[N << 2]; 
inline void push_down(int u) {
	if (!tree[u].lz) return ;
	tree[u << 1].lz ^= 1;
	tree[u << 1 | 1].lz ^= 1;
	if (tree[u << 1].l == tree[u << 1].r) a[tree[u << 1].l] ^= 1;
	if (tree[u << 1 | 1].l == tree[u << 1 | 1].r) a[tree[u << 1 | 1].l] ^= 1;
	tree[u].lz = 0; 
}
inline void build(int u, int l, int r) {
	tree[u].l = l, tree[u].r = r;
	if (l == r) {
		return ;
	}
	int mid = l + r >> 1;
	build(u << 1, l, mid);
	build(u << 1 | 1, mid + 1, r);
}
inline void chg(int u, int l, int r) {
	if (l <= tree[u].l && tree[u].r <= r) {
		if (tree[u].l == tree[u].r) a[tree[u].l] ^= 1;
		else tree[u].lz ^= 1;
		return ;
	}
	if (tree[u].r < l || tree[u].l < r) return ;
	push_down(u);
	if (l <= tree[u << 1].r) chg(u << 1, l, r);
	if (tree[u << 1 | 1].l <= r) chg(u << 1 | 1, l, r);
}
inline int search(int u, int id) {
	if (tree[u].l == tree[u].r) {
		return a[tree[u].l];
	}
	push_down(u);
	if (id <= tree[u << 1].r) search(u << 1, id);
	else search(u << 1 | 1, id);
}
signed main() {
	scanf("%d%d", &n, &m);
	build(1, 1, n);
	for (int i = 1; i <= m; i++) {
		scanf("%d", &id);
		if (id == 1) {
			scanf("%d%d", &x, &y);
			chg(1, x, y);
		} else {
			scanf("%d", &x);
			printf("%d\n", search(1, x));
		}
	}
	return 0;
}
/*
20 10
1 1 5
1 2 6
2 2
*/
2024/9/20 09:40
加载中...