
主席树
文章平均质量分 60
可持久化线段树
SSL_DFT
这个作者很懒,什么都没留下…
展开
-
【洛谷 P3567】 [POI2014]KUR-Couriers 【主席树】
【洛谷 P3567】 [POI2014]KUR-Couriers题目大意:给你一个序列,每次问你区间[l,r][l,r][l,r]中是否有一个数出现的次数严格超过一半,有就输出,反之输出0思路:区间的长度是(r−l+1)/2,(r-l+1)/2,(r−l+1)/2,那么我们就要找到一个数出现次数多于这个。首先建立一棵主席树。修改操作要和维护区间 k 小数一样。然后我们每次查询时,查询有多少个比当前节点维护的数大,如果超过一半,那么就查询右子树;然后查询比它小的数,如果大于一半,那么查询左子树原创 2021-08-14 16:23:37 · 174 阅读 · 0 评论 -
主席树模板二:【洛谷 P3919】可持久化线段树 1(可持久化数组)
【洛谷 P3919】可持久化线段树 1(可持久化数组)题目大意:让你维护一个数组,维护两个操作:1.在数组的某个历史版本上修改一个数,修改后生成一个新的版本。2 查询数组某个历史版本上的某个位置上数的值,将该版本拷贝一份作为新的版本。思路:主席树的模板。关于主席树建主席树,询问,修改。每次在树中找到该历史版本,直接修改。询问时将该历史版本复制即可。代码:#include<iostream>#include<cstdio>#include<algori原创 2021-08-14 11:49:04 · 97 阅读 · 0 评论 -
洛谷 P2633 Count on a tree 【主席树】
【洛谷 P2633】 Count on a tree题目大意:给你一棵树,每次询问树上两个点之间的路径中的第 k 小的点权。思路:主席树模板。我们考虑在树上建立一棵主席树,然后把树根到每一个点的路径看做一段区间。然后类比之前求解区间 k 小数的思路,最后的答案统计方式为sum[x]+sum[y]−sum[LCA(x,y)]−sum[fa[LCA(x,y)]]sum[x]+sum[y]-sum[LCA(x,y)]-sum[fa[LCA(x,y)]]sum[x]+sum[y]−sum[LCA(x原创 2021-08-14 10:28:01 · 126 阅读 · 0 评论 -
主席树模板:【洛谷 P3384】
主席树模板:【洛谷 P3384】题目大意:给你一堆[l,r][l,r][l,r],问区间内的第 k 小数思路:详见这篇:代码:#include<iostream>#include<cstdio>#include<algorithm>#include<queue>#include<cstring>#include<vector>#define r register#define rep(i,x,y) for(r原创 2021-08-13 12:02:49 · 101 阅读 · 0 评论 -
主席树学习笔记
主席树主席树,又称可持久化线段树,主要思想在线段树上加上一些历史节点去维护一些历史数据,实现对过去数据的查询。去盗了一张图途中橙色的节点维护的就是历史数据。主席树的用处引用大佬的一段话:主席树就是利用函数式编程的思想来使线段树支持询问历史版本、同时充分利用它们之间的共同数据来减少时间和空间消耗的增强版的线段树。其实它是一堆线段树的集合体。因为对于一个点的修改,它对整棵树的影响就是根节点到叶节点的这条长度为log nlog~nlog n的路径上的每一个节点,所以它每次修改原创 2021-08-13 11:59:24 · 152 阅读 · 0 评论