可持久化数据结构

一些需要 历史信息 时,我们可以根据 时间 进行可持久化操作。

1. 可持久化线段树

1

3. 可持久化 Trie

和可持久化线段树一样的思想,没插入一个数,新建 logV 个节点,剩下的节点向 已有节点 相连即可。

I P5283 [十二省联考 2019] 异或粽子

可持久化 Trie 后我们考虑每个节点 i,建立一个大根堆,存 n 个节点除选过的,si 与其余点的最大值,每次选出堆顶,更新一下即可。

复杂度 O(nlogV+klogn)

代码

II CF241B Friends
上一题的加强。

k 比较大,不考虑关于 k 的解法。

首先可以二分,二分 mid,我们求出所有与 si 异或值 mid 的个数,可持久化 Trie 可以解决,判断一下,可以找到第 k 大的异或值。具体在每个节点有一个 size 存其字节点个数,查询时找出 mid 的点加上即可。

然后问题就转化成了找出与 si 异或值 z 的值的和,我们在 Trie 上存储所有字节点的 01 个数,拆一下贡献,查询时加上即可。

但是由于 异或和等于 z 的方案可能不止一个,所以我们需要统计一下方案数,减去多余的贡献。

时间复杂度都是 O(nlog2V),空间复杂度也是 O(nlog2V) ,可能需要卡卡。

复杂度极其劣,跑的巨慢,其实可以直接不用可持久化,不过我没想到

代码

III P3586 [POI2015] LOG

树剖比较 native,我们考虑分成两个 可持久化 Trie,一个维护 dfn 序,一个维护到根路径,这样求个 LCA,查询一下,复杂度时 O(nlogV+mlogn)

代码

posted @   oXUo  阅读(2)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
网站统计
点击右上角即可分享
微信分享提示