线段树合并特殊情况下的线性空间做法
问题:给定一棵树,根为 \(1\),现在你需要对每个节点维护子树节点的集合的一些信息,如果我们使用线段树合并,能否做到 \(O(n)\) 空间?
做法:考虑树剖,我们优先访问重儿子并且把已经访问过的儿子缩上去备用,我们来分析一下当前任意时刻持有的节点数。一个 \(a\) 个节点的线段树至多有 \(O(a(\log \frac{n}{a}+1))\) 个节点。
一个显然的事实是 \(\sum_{i=0}^{n}2^i\times(n-i+1) = O(2^n)\) 。
此时我们对每时每刻持有的节点数分析即可知道节点数为 \(O(n)\)