求助(玄关)
查看原帖
求助(玄关)
1287433
__ycy1124__楼主2024/7/24 11:44
#include<bits/stdc++.h>
using namespace std;
struct Node{
	int bj,js;
}a[500001];
long long int b[100001];
void work(int p,int l,int r){
	int mid=(l+r)>>1;
	if(l==r){
		return;
	}
	work(p*2,l,mid);
	work(p*2+1,mid+1,r);
}
void push_up(int p){
	a[p].js=a[2*p].js+a[2*p+1].js;
}
void work1(int p,int l,int r,int x,int y){
	int mid=(l+r)>>1;
	if(x<=l&&y>=r){
		a[p].bj^=1;
		if(a[p].bj==1){
			a[p].js=1;
		}
		else{
			a[p].js=0;
		}
		return;
	}
	if(x>mid){
		work1(p*2+1,mid+1,r,x,y);
	}
	else if(y<=mid){
		work1(p*2,l,mid,x,y);
	}
	else{
		work1(p*2,l,mid,x,y);
		work1(p*2+1,mid+1,r,x,y);
	}
	push_up(p);
}
int ans(int p,int l,int r,int x,int y){
	int mid=(l+r)>>1;
	//push_up(p);
	if(x<=l&&y>=r){
		return a[p].js;
	}
	if(x>mid){
		return ans(p*2+1,mid+1,r,x,y);
	}
	else if(y<=mid){
		return ans(p*2,l,mid,x,y);
	}
	else{
		return ans(p*2+1,mid+1,r,x,y)+ans(p*2,l,mid,x,y);
	}
}
void read(long long &x){
	x=0;
	int f=1;char ch=getchar();
	while (ch<'0'||ch>'9'){if (ch=='-') f=-1;ch=getchar();}
	while (ch>='0'&&ch<='9'){x=x*10+ch-48;ch=getchar();}
	x*=f;
}
int main(){
	long long n,m;
	read(n);
	read(m);
	work(1,1,n);
	for(int i=1;i<=m;i++){
		long long ch,x,y;
		read(ch);
		if(ch==0){
			read(x);
			read(y);
			work1(1,1,n,x,y);
		}
		else{
			read(x);
			read(y);
			printf("%d\n",ans(1,1,n,x,y));
		}
	}
	return 0;
}
2024/7/24 11:44
加载中...