0分求调!
查看原帖
0分求调!
648996
_orange_楼主2024/1/24 10:12
#include<bits/stdc++.h>
using namespace std;
int w[400001],n,m;
void push_up(int u){
	w[u]=w[u*2]+w[u*2+1];
}
bool in_range(int L,int R,int l,int r){
	return L>=l&&r>=R;
}
//

int lazy[400001];
void push_down(int u,int l,int r){
	if(!lazy[u]){return;}
	w[u]=r-l+1-w[u];
	int mid=(l+r)/2;
	lazy[u*2]^=1;
	lazy[u*2+1]^=1;
	if(lazy[u*2])w[u*2]=mid-l+1-w[u*2];
	if(lazy[u*2+1])w[u*2+1]=r-mid-w[u*2+1];
	lazy[u]=0;
}
//
int check(int u,int L,int R,int l,int r){
	if(in_range(L,R,l,r)){
		return w[u];
	}
	push_down(u,L,R);
	int a=0,b=0,mid=(L+R)/2;
	if(l<=mid)a=check(u*2,L,mid,l,r);
	if(mid<r)b=check(u*2+1,mid+1,R,l,r);
	return a+b;
}
void update(int u,int L,int R,int l,int r){
	if(in_range(L,R,l,r)){
		w[u]=R-L+1-w[u];
		lazy[u]^=1;return;
	}
	push_down(u,L,R);
	int mid=(L+R)/2;
	if(l<=mid)update(u*2,L,mid,l,r);
	if(mid<r)update(u*2+1,mid+1,R,l,r);
	push_up(u);
}
int main(){
	cin>>n>>m;
	int a,b,c;
	for(int i=0;i<m;i++){
	    //check(1,1,n,1,n);
		cin>>c>>a>>b;
		if(c){
			//cout<<a<<" "<<b<<endl;
			cout<<check(1,1,n,a,b)<<endl;
		}else{
			update(1,1,n,a,b);
		}
	}
	return 0;
} 
2024/1/24 10:12
加载中...