可持久化数据结构
现阶段常用的可持久化数据结构大概有以下三类:可持久化线段树、并查集、Trie 树。
因此本文将围绕这三个大类来讲。
1.可持久化线段树/可持久化数组
可持久化线段树本来有一个更为脍炙人口的名字,但由于某些原因我们将其称为可持久化线段树。
考虑在单点修改线段树时,由于线段树高
如果是区间修改,我们尝试着使用标记永久化,仅在查询时计算标记的贡献,统计出从根节点到当前区间的节点的标记和,再加上这个区间的值即为所求。
区间赋值可以维护时间戳,查询时找时间戳最大的修改的权值。
接下来是可持久化的经典应用:静态区间第
首先将权值离散化,按照下标顺序以此将每个值加入线段树,这个线段树维护的是每个值的出现次数,运用可持久化线段树维护每加入一个值后线段树的状态。因此,
接下来考虑如何找到第
单纯推导比较简单,建议多做例题分析。
2.可持久化并查集
基于可持久化数组。
考虑朴素的并查集 merge
,我们只将一个点的 fa
改变了,因此可以用可持久化数组维护各个版本的并查集,此时无法使用路径压缩。因此,可以维护 siz
数组,每次将 siz
较小的向较大的合并。
并查集的应用范围大多用来查询连通性,可以猜测到可持久化并查集可以用来维护带有上下界的连通性问题。例如,按边权顺序加入并查集时,可以查询
3.可持久化 Trie
同样依赖于可持久化线段树的思想,插入一个数或字符串时新建节点,在上一个版本的基础上新建节点。
大部分可持久化数据结构所涉及到的思路是每次操作对整个数据结构的影响不会太大,因此利用重复信息新建一个数据结构。这类压缩重复信息的思想在很多题目中都有应用。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探