我把我AC的代码改吧了一下,其他都不变,就把 trans 函数改成了这样:
void trans(int rt){
if(uni[rt]&ins[rt])uni[rt]^=1,ins[rt]^=1;
if(uni[rt]==0&&ins[rt]==0)uni[rt]^=1,ins[rt]^=1;
lz[rt]^=1;
}
就WA了。
另外,把 uni[rt]==0&&ins[rt]==0 改成 ~uni[rt]&~ins[rt] 和 !uni[rt]&!ins[rt] 都不行。
uni 表示或,ins 表示与,lz 是懒标记。都是 bool 类型的。
目测应该是 bool 类型的运算出了问题。所以能问一下为什么会爆吗?