void spread(ll p) {
if(t[p].mul_tag != 1) {
t[ls(p)].val = (t[p].mul_tag * t[ls(p)].val) % mod;
t[rs(p)].val = (t[p].mul_tag * t[rs(p)].val) % mod;
t[ls(p)].mul_tag = (t[ls(p)].mul_tag * t[p].mul_tag) % mod;
t[rs(p)].mul_tag = (t[rs(p)].mul_tag * t[p].mul_tag) % mod;
t[ls(p)].add_tag = (t[ls(p)].add_tag * t[p].mul_tag) % mod;
t[rs(p)].add_tag = (t[rs(p)].add_tag * t[p].mul_tag) % mod;
t[p].mul_tag = 1;
}
if(t[p].add_tag != 0) {
t[ls(p)].val = (t[ls(p)].val + t[p].add_tag * (t[ls(p)].r - t[ls(p)].l + 1)) % mod;
t[rs(p)].val = (t[rs(p)].val + t[p].add_tag * (t[rs(p)].r - t[rs(p)].l + 1)) % mod;
t[ls(p)].add_tag = (t[ls(p)].add_tag + t[p].add_tag) % mod;
t[rs(p)].add_tag = (t[rs(p)].add_tag + t[p].add_tag) % mod;
t[p].add_tag = 0;
}
}
上述代码中,对于乘数标记的if判断条件,当if(1)
或if(t[p].mul_tag != 1)
时都可以AC,唯独if(t[p].mul_tag)
只过三个点。
我认为错误的判断是属于if(1)
判断之中啊,为什么会错?求助题友