社区讨论

后人你怎么被进食了www(40pts)

P6242【模板】线段树 3(区间最值操作、区间历史最值)参与者 1已保存回复 1

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
1 条
当前快照
1 份
快照标识符
@mjdmnw8x
此快照首次捕获于
2025/12/20 09:36
2 个月前
此快照最后确认于
2025/12/21 18:25
2 个月前
查看原帖
先上原代码
C
void push_down(int u) {
        if (!tr[u].tag1 && !tr[u].tag2)
            return;
        if (tr[ls].mx < tr[rs].mx)
            chance(ls, tr[u].tag2, tr[u].tag2, tr[u].tag4, tr[u].tag4);
        else
            chance(ls, tr[u].tag1, tr[u].tag2, tr[u].tag3, tr[u].tag4);
        if (tr[rs].mx < tr[ls].mx)
            chance(rs, tr[u].tag2, tr[u].tag2, tr[u].tag4, tr[u].tag4);
        else
            chance(rs, tr[u].tag1, tr[u].tag2, tr[u].tag3, tr[u].tag4);
        tr[u].tag1 = tr[u].tag2 = tr[u].tag3 = tr[u].tag4 = 0;
    }
这个判断是假的,因为 chance 已经更新了新的 mx,应该是下面这样
C
void push_down(int u) {
        int mx = max(tr[ls].mx, tr[rs].mx);
        if (tr[ls].mx != mx)
            chance(ls, tr[u].tag2, tr[u].tag2, tr[u].tag4, tr[u].tag4);
        else
            chance(ls, tr[u].tag1, tr[u].tag2, tr[u].tag3, tr[u].tag4);
        if (tr[rs].mx != mx)
            chance(rs, tr[u].tag2, tr[u].tag2, tr[u].tag4, tr[u].tag4);
        else
            chance(rs, tr[u].tag1, tr[u].tag2, tr[u].tag3, tr[u].tag4);
        tr[u].tag1 = tr[u].tag2 = tr[u].tag3 = tr[u].tag4 = 0;
    }

回复

1 条回复,欢迎继续交流。

正在加载回复...