对向后传递中乘数tag的判断有疑惑
查看原帖
对向后传递中乘数tag的判断有疑惑
301429
CpyKing楼主2021/12/3 17:55
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)判断之中啊,为什么会错?求助题友

2021/12/3 17:55
加载中...