题解:P11127 [ROIR 2024] 二叉树的遍历 (Day 2)
Lucyna_Kushinada · · 题解
想了很久 polylog 做法无果,点开题解一看是全是根号做法,心脏骤停。
首先要对于点
-
-
-
存在一个
x,y 的公共祖先z ,y 在z 左子树,x 在z 的右子树。
这三种都可以预处理,因为第一、二种只关心
如果是单点修改,这两个也可以用树状数组简单做,但是这个是区间修改,在 dfs 序并不是一段连续的区间,很难做,只能考虑分块。
对于每个块维护数组
注意到如果一个点是后序遍历,它不会对任何一个点产生影响,所以只考虑另外两种操作状态。
如果一个块内都是同一种操作状态,显然可以简单预处理维护,这要求修改区间完全包含它。
那么就考虑散块的情况,此时修改区间和它相交不包含,此时只能重构。
为什么重构复杂度是对的,每次修改至多需要重构两个散块。
此时需要构建一个新的
那么就是一共