10分求调
查看原帖
10分求调
1304410
Linyijun_楼主2025/2/6 09:16
#include<bits/stdc++.h>
using namespace std;
int n,m;
int k,a,c;
int d[400040],b[400040];
void f1(int l,int r,int s,int t,int p){
	if(l<=s&&t<=r){
		d[p]=(t-s+1)-d[p];
		b[p]^=1;
		return;
	}int mid=(s+t)/2;
	if(l<=mid)f1(l,r,s,mid,p*2);
	if(r>mid)f1(l,r,mid+1,t,p*2+1);
	d[p]=d[p*2]+d[p*2+1];
	return;
}
int f2(int l,int r,int s,int t,int p){
	if(l<=s&&t<=r)return d[p];
	int mid=(s+t)/2;
	if(b[p]==1){
		d[p*2]=(mid-s+1)-d[p*2];
		d[p*2+1]=(t-mid)-d[p*2+1];
		b[p*2]^=1;
		b[p*2+1]^=1;
		b[p]=0;
	}int ans=0;
	if(l<=mid)ans+=f2(l,r,s,mid,p*2);
	if(r>mid)ans+=f2(l,r,mid+1,t,p*2+1);
	return ans;
}
int main(){
	cin>>n>>m;
	for(int i=1;i<=m;i++){
		cin>>k>>a>>c; 
		if(k==0){
			f1(a,c,1,n,1);
		}if(k==1){
			cout<<f2(a,c,1,n,1)<<endl;
		}
	}
	return 0;
}/*
*/
2025/2/6 09:16
加载中...