样例都过不了,直接 RE
查看原帖
样例都过不了,直接 RE
813622
Igallta楼主2023/11/6 22:08

找不到原因,救我!!!!

/****************************************
作者:
版权:
日期:
*****************************************/
#include<bits/stdc++.h>
#define LL k<<1
#define RR k<<1|1
using namespace std;
const int N = 4e5 + 1;
int n, m ,sumt;
struct Node {
	int l, r, sum = 0, lazy = 0;
} t[N];
inline void pushup(int k) {t[k].sum = t[LL].sum + t[RR].sum;}
inline void pushdown(int k,int l,int r){
	if(t[k].lazy){
		t[LL].lazy^=1; 
		t[RR].lazy^=1;
		int mid=l+r>>1;
		t[LL].sum=(mid-l+1)-t[LL].sum;//因为倒过来了
		t[RR].sum=(r-mid)-t[RR].sum;
		t[k].lazy=0;//下放完成 
	}
}
inline void build(int k, int l, int r) {
	t[k].l = l;
	t[k].r = r;
	if (l==r)return;
	int mid = l + r >> 1;
	build(LL, l, mid);
	build(RR, mid + 1, r);
}
inline void update(int k,int l,int r){
	if(t[k].l <= l && t[k].r <=r){
		t[k].sum=(r-l+1)-t[k].sum;
		t[k].lazy^=1;
		return;
	}
	pushdown(k,l,r);
	int mid=t[k].l+t[k].r>>1;
	if(l<=mid)update(LL,l,r);
	if(r>mid) update(RR,l,r);
	pushup(k);

}
inline int ask(int k,int l,int r){
	if(l<=t[k].l && r<=t[k].r)return t[k].sum;
	pushdown(k,l,r);
	int mid=t[k].l+t[k].r>>1,xx,yy;
	if(l <= mid)xx=ask(LL,l,r);
	if(mid<r)yy=ask(RR,l,r);
	return xx+yy;
}
int main() {
	cin>>n>>m;
	build(1,1,n);
	while(m--){
		int type,l,r;
		cin>>type>>l>>r;
		if(!type){
			update(1,l,r);
		}else{
			cout<<ask(1,l,r)<<'\n';
		}
	}
	return 0;
}

2023/11/6 22:08
加载中...