可持久化trie树

脑补出来的一个东西,不知道别人是怎么实现的……
自己也还没有用写的代码交过题……不过把想法和大佬说了,应该是正确的。

例题:

一个数列,每次查询[l, r]内的数中取一个数和给定值xor后的最大值。

解法:

如果没有区间限制,那么直接将所有数都插入trie树就可以了,但是这里需要指定区间的,所以不能直接处理。
因此对于trie树上的每个点,我们记录下包括这个点在内的子树中一共有多少结束节点。
然后每插入一个点相当于对结束节点的单点修改,用类似于主席树的方式插入即可。
对于区间[1, l - 1]和[1, r]的同一个位置的节点,如果2个点的值相差大于0,那么说明这个区间中有数经过了这个节点,说明这个节点是存在的。
因此我们就可以知道这个区间内的trie树长什么样了。
然后直接跑就行了。

posted @ 2019-02-25 22:10  ww3113306  阅读(179)  评论(0编辑  收藏  举报
知识共享许可协议
本作品采用知识共享署名-非商业性使用-禁止演绎 3.0 未本地化版本许可协议进行许可。