注意在 push_up() 函数中,当前区间最大子段的来源应当是左儿子的区间最大子段,右儿子的区间最大子段以及左儿子的后缀和右儿子的前缀,而不是左儿子的前缀,右儿子的后缀以及左儿子的后缀和右儿子的前缀。
push_up()
p[x] = push_up(p[ls(x)], p[rs(x)]); 而不是 p[x] = push_up(p[rs(x)], p[ls(x)];。
p[x] = push_up(p[ls(x)], p[rs(x)]);
p[x] = push_up(p[rs(x)], p[ls(x)];
注意覆盖标记和取反标记的优先级。先传递覆盖标记,再传递取反标记。