标签
01 trie 合并这是一个神秘的做法。
考虑从将儿子子树的贡献加到父亲上。
Q:从儿子到父亲,如何处理 \(d + 1\) 的问题?
A:有一个神秘做法,就是从低到高建 01 trie,然后相当于将左右儿子交换(\(0\) 变 \(1\),\(1\) 进位后变 \(0\)),然后递归到左儿子继续操作。最开始 \(val_x \oplus\!= val_y\),对于到达的节点(假设对应 \(c\) 个数),那么这一位 \(i\) 的 \(c\) 个数 \(0, 1\) 全部颠倒,于是 \(val_x \oplus \!= (c \& 1) \cdot2^{i}\) 即可。
Q:如何合并两个儿子?
A:使用类似线段树合并的策略,使用 01 trie 合并,做到时间复杂度为 \(O(\text{节点个数}) = O(n \log n)\)。
两个新奇的操作,全都没想到,这个做法太神奇了!!