线段树合并的线性空间做法
考虑使用这个长得像平衡树的线段树。
合并的时候,如果有空节点直接返回,否则先将左右儿子合并,将另一个节点存的值插入下去。
空间显然是线性的。
时间复杂度考虑以每个值的深度之和为势能,插入的复杂度等于势能的增加量,而势能永远小于
不过如果这个东西做线段树分裂的话会出现一定问题,如果保证每个点一定有值,需要做一个类似上旋的过程,把下面的值拿上来,但是这样会破坏势能分析,导致复杂度变为
如果不保证,则空间会因为分裂导致是
压链 01-trie 可能也可以写差不多的东西,不过感觉会比较难写,但是压链 01-trie 做线段树分裂的复杂度可能更对一点。
压链 01-trie点数是 2倍,这个点数是一倍,有巨大空间优势。
模板题提交记录 (这份代码因为使用了 st 表求 lca,所以空间复杂度没变,跑得其实差不多快)