0分求调T_T
查看原帖
0分求调T_T
745288
Joker_Error_404楼主2023/11/9 20:58
#include<iostream>
using namespace std;
#define ls (x<<1)
#define rs (x<<1|1)
#define mid ((l+r)>>1)
constexpr int manx = 2e5+10;
int f[manx<<2],m,n,a,b,c,tag[manx<<2],sum;
inline void push_up(const int x)
{
	f[x]=f[ls]+f[rs];
}
inline void Push_down(const int l,const int r,const int x,const int t)
{
	if(tag[x]||t){
	f[x]=r-l+1-f[x];
	tag[x]=!tag[x];
	if(l==r)tag[x]=0;
	}
}
inline void push_down(const int l,const int r,const int x)
{
	if(tag[x]){
	f[x]=r-l+1-f[x];
	tag[x]=!tag[x];
	}
	Push_down(l,mid,ls,tag[x]);
	Push_down(mid+1,r,rs,tag[x]);
}
inline void into(const int l,const int r,const int nl,const int nr,const int x)
{
	if(l>=nl&&r<=nr) 
	{
		f[x]=r-l+1-f[x];
		tag[x]=!tag[x];
		if(l==r)tag[x]=0;
		push_down(l,r,x);
		return;
	}
	push_down(l,r,x);
	if(nl<=mid)		into(l,mid,nl,nr,ls);
	if(nr>=mid+1)	into(mid+1,r,nl,nr,rs);
	push_up(x);
}
inline void find_(const int l,const int r,const int nl,const int nr,const int x)
{
	push_down(l,r,x);
	if(l>=nl&&r<=nr) 
	{
		sum+=f[x];
		return;
	}
	if(nl<=mid)find_(l,mid,nl,nr,ls);
	if(nr>=mid+1)find_(mid+1,r,nl,nr,rs);
	push_up(x);
}
int main()
{
//	freopen("out.txt","w",stdout);
	ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	cin>>n>>m;
	for(int q=0;q<m;q++)
	{
		cin>>c>>a>>b;
		if(c==0)
		{
			into(1,n,a,b,1);
		}
		else 
		{
			sum=0;
			find_(1,n,a,b,1);
			cout<<sum<<endl;
		}
	}

}
2023/11/9 20:58
加载中...