可持久化字典树


引入

可持久化 Trie 的方式和可持久化线段树的方式是相似的,即每次只修改被添加或值被修改的节点,而保留没有被改动的节点,在上一个版本的基础上连边,使最后每个版本的 Trie 树的根遍历所能分离出的 Trie 树都是完整且包含全部信息的。

大部分的可持久化 Trie 题中,Trie 都是以

01-Trie 的形式出现的。

对一个长度为 的数组 维护以下操作:

  1. 在数组的末尾添加一个数 ,数组的长度 自增
  2. 给出查询区间 和一个值 ,求当 时, 的最大值。

过程

这个求的值可能有些麻烦,利用常用的处理连续异或的方法,记 ,则原式等价于 ,观察到 在查询的过程中是固定的,题目的查询变化为查询在区间 中异或定值()的最大值。

继续按类似于可持久化线段树的思路,考虑每次的查询都查询整个区间。我们只需把这个区间建一棵 Trie 树,将这个区间中的每个树都加入这棵 Trie 中,查询的时候,尽量往与当前位不相同的地方跳。

查询区间,只需要利用前缀和和差分的思想,用两棵前缀 Trie 树(也就是按顺序添加数的两个历史版本)相减即得到该区间的 Trie 树。再利用动态开点的思想,不添加没有计算过的点,以减少空间占用。

贡献者:@WenzelTian@CCXXXI@代建杉@kenlig@REYwmp@mgt@Chrogeek@H-J-Granger@Henry-ZHR@ouuan@Shuhao@Ir1d@雷蒻

本页面最近更新:2/3/2023, 12:00:00 AM更新历史

发现错误?想一起完善? 在 GitHub 上编辑此页!

本页面的全部内容在 CC BY-SA 4.0SATA 协议之条款下提供,附加条款亦可能应用

评论

0 条评论
未登录用户


Copyright © 2016 - 2023 OI Wiki Team

最近更新:fd2ec2c, 2023-02-03

联系方式:Telegram 群组 / QQ 群组