A了,但是有一个小疑问
查看原帖
A了,但是有一个小疑问
506524
wangzll楼主2022/11/18 19:06

就是lazy数组为什么要与1,难道是因为取反是奇数次是指1的个数,偶数指0的个数吗


void pushdown(ll k,ll l,ll r,ll m)
{
	if(lazy[k]==1)
	{
		tree[k<<1]=m-l+1-tree[k<<1];
		tree[k<<1|1]=r-m-tree[k<<1|1];
		lazy[k<<1]^=1,lazy[k<<1|1]^=1;
		lazy[k]=0;
	}
}
void updata(ll l,ll r,ll L,ll R,ll k)
{
	if(L<=l&&r<=R)
	{
		tree[k]=r-l+1-tree[k];
		lazy[k]^=1;
	}
	else
	{
		ll m=l+((r-l)>>1);
		pushdown(k,l,r,m);
		if(L<=m)
		{
			updata(l,m,L,R,k<<1);
		}
		if(R>m)
		{
			updata(m+1,r,L,R,k<<1|1);
		}
		tree[k]=tree[k<<1]+tree[k<<1|1];
	}
}
2022/11/18 19:06
加载中...