主席树
文章平均质量分 59
andyc_03
这个作者很懒,什么都没留下…
展开
-
主席树
主席树全称是可持久化权值线段树,主要解决区间第k大问题注意空间大小为NlogN,一般可以开到N<<51.P4587 [FJOI2016]神秘数【题意】给定一个数列,求最小的不能被l-r集合中的数表示的值【分析】这个题目有一个很好的思想,类似于货币?如果当前已经表示出1-pos,集合中最大的为mx,那么新加入的一个值一定在[mx+1,pos+1]才对结果又影响,如果小于mx+1,那么和以前一样,如果大于pos+1,中间有断开的位置,所以答案还是不会变,所以我们的问题变成了求.原创 2021-04-21 23:51:36 · 216 阅读 · 0 评论 -
【可持久化并查集】P4768 [NOI2018]归程
首先,由于题目强制在线,所以需要用到可持久化并查集去维护动态的并查集,去动态的记录fa数组。跑最短路要dijkstra对于高度要离散化,否则点太多细节特别多。。。。代码#include<bits/stdc++.h>using namespace std;const int maxn=4e5+5;int t,n,q,cnt,k,s,m,tot,dep[maxn<<5],root[maxn],head[maxn],dis[maxn],v...原创 2020-08-11 22:17:10 · 122 阅读 · 0 评论 -
【主席树+并查集】P3402 可持久化并查集
这道题目需要用主席树维护可持久化,用按秩合并优化并查集即可代码#include<bits/stdc++.h>using namespace std;const int maxm=4500005;int n,m,root[maxm],cnt,f[maxm],dep[maxm];struct tree{ int l,r;}tr[maxm];int build(int now,int l,int r){ now=++cnt; if(l==r) { f[..原创 2020-08-06 21:41:51 · 134 阅读 · 0 评论 -
【主席树】P3919 【模板】可持久化线段树 1(可持久化数组)
基本模板,就是每次修改再建立一个根节点,然后将要修改的部分建立新节点;之后每次询问就从提问的那个root去进行线段树上的查找即可代码#include<bits/stdc++.h>using namespace std;const int maxn=4e7+5;const int maxm=1e6+5;int n,m,cnt,root[maxn],a[maxm];struct tree{ int l,r,val;}tr[maxn];int build(int no.原创 2020-08-06 20:42:14 · 160 阅读 · 0 评论 -
【主席树】poj 2104 K-th Number
这道题目要求我们求出一个区间内的第k大,静态的首先可以考虑建立n棵权值线段树,第i棵线段树[a,b]记录数组1-i的区间中,数字a-b一共出现了多少次,也就是说这棵线段树的叶子节点的位置表示的是这个数字在1-i这个区间出现的次数如果要求区间[a,b]内的第k大,我们可以利用前缀和的思想,将第b棵线段树和第a-1棵线段树相减,那么就可以得到了[a,b]这个区间内的权值线段树,然后就可以按照线段树的思想,去query第k的位置就可以了然而,我们需要开n棵线段树,显然空间消耗过大我们通过观察线段树原创 2020-08-01 20:16:04 · 122 阅读 · 0 评论