随笔分类 -  数据结构-可持久化数据结构

摘要:题意:01序列,区间反转,版本回退,求和 主席树(可持久化线段树)裸题,貌似我还没有写过带pushdown操作的主席树板子,就先贴一个在这里 注意在修改和pushdown操作的时候要新建结点 1 #include<bits/stdc++.h> 2 using namespace std; 3 typ 阅读全文
posted @ 2021-04-05 22:39 jrltx 阅读(56) 评论(0) 推荐(0) 编辑
摘要:题意:从数组a中找出一个区间[l,r]中只出现过一次的数 设pre[i]表示a[i]在i之前的上一次出现,a[i]在[l,r]中只出现过一次等价于pre[i]<l,所以只需在[l,r]中找出一个满足pre[i]<l的i就行了。由于还必须保证i是在[l,r]中最后一次出现,一棵线段树是实现不了的,需要 阅读全文
posted @ 2020-05-10 18:26 jrltx 阅读(207) 评论(0) 推荐(0) 编辑
摘要:我最开始接触k短路时用的是A*算法,后来我从某位大佬那里得知A*算法的复杂度不稳定,可能会退化成平方级别的(比如,所有结点首尾相连成环) (注:A*算法不会降低时间复杂度!不用A*算法,用一个普通的优先队列照样可以做,复杂度是一样的,就是A*在一般情况下更快而已) 于是学了下用可持久化可并堆维护数据 阅读全文
posted @ 2020-03-03 23:06 jrltx 阅读(349) 评论(0) 推荐(0) 编辑
摘要:n个集合 m个操作 操作: 1 a b 合并a,b所在集合 2 k 回到第k次操作之后的状态(查询算作操作) 3 a b 询问a,b是否属于同一集合,是则输出1否则输出0 说是可持久化并查集,实际上是把并查集的所有find和merge操作都放到可持久化数组上做,这样可以做到完全可持久化(不仅能查询某 阅读全文
posted @ 2019-10-05 20:18 jrltx 阅读(172) 评论(0) 推荐(0) 编辑
摘要:紫薯例题 阅读全文
posted @ 2019-07-30 09:59 jrltx 阅读(221) 评论(0) 推荐(0) 编辑
摘要:题目链接 感谢Dream_Lolita的题解,经过无数次失败的尝试之后终于AC了... 线段树是维护区间信息的强大工具,但它的形态是固定的,只支持修改和删除操作,不支持插入、反转、复制、分裂合并等操作,而treap支持。这道题有个区间复制的操作,因此只能用treap来代替了。 注意几个坑点: 1.对 阅读全文
posted @ 2019-06-27 16:15 jrltx 阅读(633) 评论(0) 推荐(1) 编辑
摘要:题目链接 文艺平衡树的可持久化版,可以使用treap实现。 作为序列使用的treap相对splay的优点如下: 1.代码短 2.容易实现可持久化 3.边界处理方便(splay常常需要在左右两端加上保护结点以防越界,而treap一般不用) 可以分裂合并的treap一般称作无旋treap或FHQ-tre 阅读全文
posted @ 2019-06-27 15:44 jrltx 阅读(206) 评论(0) 推荐(0) 编辑
摘要:题目链接 对每个结点建立两棵线段树,一棵记录该结点的子树下每种颜色对应的最小深度,另一棵记录子树下的每个深度有多少结点(每种颜色的结点只保留最浅的深度即可),自底而上令父节点继承子结点的线段树,如果合并两棵颜色线段树时发现某种颜色重复,则在深度线段树上把较深的深度对应的位置-1。 注意由于强制在线, 阅读全文
posted @ 2019-04-09 15:37 jrltx 阅读(458) 评论(0) 推荐(0) 编辑
摘要:题目链接 先把初始边建成一个森林,每棵树选一个根节点递归建可持久化线段树。当添加新边的时候,把结点数少的树暴力重构,以和它连边的那个点作为父节点继承线段树,并求出倍增数组。树的结点数可以用并查集来维护。总复杂度O(nlog2n)阅读全文
posted @ 2019-03-27 13:37 jrltx 阅读(215) 评论(0) 推荐(0) 编辑
摘要:题目链接 第一种方法,dfs序上建可持久化线段树,然后询问的时候把两点之间的所有树链扒出来做差。 1 #include<bits/stdc++.h> 2 using namespace std; 3 typedef long long ll; 4 const int N=1e5+10,inf=0x3 阅读全文
posted @ 2019-03-26 16:24 jrltx 阅读(269) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示