社区讨论
后人你怎么被进食了www(40pts)
P6242【模板】线段树 3(区间最值操作、区间历史最值)参与者 1已保存回复 1
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 1 条
- 当前快照
- 1 份
- 快照标识符
- @mjdmnw8x
- 此快照首次捕获于
- 2025/12/20 09:36 2 个月前
- 此快照最后确认于
- 2025/12/21 18:25 2 个月前
先上原代码
Cvoid 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;
}
这个判断是假的,因为
Cchance 已经更新了新的 mx,应该是下面这样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 条回复,欢迎继续交流。
正在加载回复...