Help Needing
查看原帖
Help Needing
285370
绝尘影_Sheldow楼主2022/11/25 10:34

RT Code:

#include<iostream>
using namespace std;
int n,m,op,x,y,t[400020],tag[400020];
void upd(int u){t[u]=t[u*2]+t[u*2+1];}
bool inrange(int l1,int r1,int l2,int r2) {return (l1>=l2)&&(r1<=r2);}
bool outofrange(int l1,int r1,int l2,int r2) {return (l1>r2)||(l2>r1);}
void maketag(int u,int l,int r,int x){tag[u]^=x;t[u]=r-l+1-t[u];}
void pushdown(int u,int l,int r){maketag(u*2,l,(l+r)/2,tag[u]);maketag(u*2+1,(l+r)/2+1,r,tag[u]);tag[u]=0;}
void add(int u,int ll,int rr,int l,int r)
{
	if(inrange(ll,rr,l,r))	maketag(u,ll,rr,1);
	else if(!outofrange(ll,rr,l,r))
	{
		pushdown(u,ll,rr);
		add(u*2,ll,(ll+rr)/2,l,r)
		add(u*2+1,(ll+rr)/2+1,rr,l,r);
		upd(u);
	}
}
int search(int u,int ll,int rr,int l,int r)
{
	if(inrange(ll,rr,l,r)) return t[u];
	if(outofrange(ll,rr,l,r)) return 0;
	pushdown(u,ll,rr);
	return search(u*2,ll,(ll+rr)/2,l,r)+search(u*2+1,(ll+rr)/2+1,rr,l,r);
}
int main()
{
	cin>>n>>m;
	for(int i=1;i<=m;i++)
	{
		cin>>op>>x>>y;
		if(op==0)	add(1,1,n,x,y);
		if(op==1)	cout<<search(1,1,n,x,y);
	}
	return 0;
}
2022/11/25 10:34
加载中...