Unverified Commit 274d00a6 authored by 雷蒻's avatar 雷蒻 Committed by GitHub
Browse files

Update ett.md

parent 725e2c6d
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -20,8 +20,8 @@

那怎么维护点到根的信息呢?

其实仔细想想, `DFS` 序也可以达到平移的效果,那么为什么需要括号序?其实,假如你要查询图中 `1``8` 的和,那么你从括号序中 `1``8` (第一个出现的)中出现两次的数的贡献抹去。如果维护的是 $\text{xor}$ ,那么直接 $\text{xor}$ 两次即可。如果维护的是 $\text{sum}$ ,那么第一个出现的数字的贡献为正,第二个为负,然后用块状链表维护区间和即可。
其实仔细想想, `DFS` 序也可以达到平移的效果,那么为什么需要括号序?其实,假如你要查询图中 `1``8` 的和,那么你从括号序中 `1``8` (第一个出现的)中出现两次的数的贡献抹去。如果维护的是 $\operatorname{xor}$ ,那么直接 $\operatorname{xor}$ 两次即可。如果维护的是 $\operatorname{sum}$ ,那么第一个出现的数字的贡献为正,第二个为负,然后用块状链表维护区间和即可。

用块状链表后除了单点修改是 $O(1)$ 外其他都是 $O(n^{\frac{1}{2}})$ 的。

对于换根操作,应该是弄不了。对于链(区间)修改,分为两种情况,一是贡献相同(如 $\text{xor}$ ) 是可以的,二是贡献不同(如 $\text{sum}$ ) 是不行的。现在的主流做法毕竟是 `LCT` ,所以这些操作比较多,在避开这种操作的情况下运用这种做法还是不错的。
`ETT` 不支持换根操作。对于链(区间)修改,分为两种情况,一是贡献相同(如 $\operatorname{xor}$ ) 是可以的,二是贡献不同(如 $\operatorname{sum}$ ) 是不行的。现在的主流做法毕竟是 `LCT` ,所以这些操作比较多,在避开这种操作的情况下运用这种做法还是不错的。