一道关于线段树水题的问题
查看原帖
一道关于线段树水题的问题
111243
Green_Bird楼主2020/8/31 16:45

AC代码:https://www.luogu.com.cn/paste/jxbdobeu
其中

void pushdown(int k,int l)
{
	if(!a[k].tag) return;
	a[ls(k)].tag^=1;
	a[rs(k)].tag^=1;
	a[ls(k)].sum=(l-(l/2))-a[ls(k)].sum;
	a[rs(k)].sum=(l/2)-a[rs(k)].sum;
	a[k].tag=0;
}  
若改成
void pushdown(int k,int l)
{
	if(!a[k].tag) return;
	a[ls(k)].tag^=1;
	a[rs(k)].tag^=1;
	a[ls(k)].sum=(l/2)-a[ls(k)].sum;
	a[rs(k)].sum=(l-(l/2))-a[rs(k)].sum;
	a[k].tag=0;
}
则无法通过

其中一篇题解中有一句话:如果说区间长度并不能整除以2,那么就把除以二向下取整丢给左儿子,然后把剩下的丢给右儿子。
所以是题解说错了吗?

2020/8/31 16:45
加载中...