可持久化数据结构(主席树/数组/并查集/字典树)
文章平均质量分 62
各种支持可持久化的数据结构
Code92007
No Saturday , no Sunday , no holiday .
展开
-
Toyota Programming Contest 2024#4(AtCoder Beginner Contest 348)G. Max (Sum - Max) (决策单调性+主席树前k大)
长为n(n<=2e5)的两个序列a和b,第i个数分别ai(-1e9<=ai<=1e9),bi(-2e14<=bi<=2e14)倘若k=x最优决策是在大于j的位置取到的,那么一定是将k=x在j处决策后的最优决策调的更优了,把相同的调优手段应用给k=x+1,也能使k=x+1更优,与k=x+1的最优决策在j矛盾。那么当i变为i+1的时候,如果无脑选第i+1个位置,就构成了一种k=x+1的决策。考虑k=x的时候,已经在i处取到了[1,i]的最优决策,此时k=x的最优决策在i+1处取到,否则还是在第i处取到。原创 2024-04-15 01:37:34 · 361 阅读 · 0 评论 -
洛谷P9388 [THUPC 2023 决赛] 先人类的人类选别(主席树+权值线段树)
操作的本质,相当于把[1,x]原来的数和[1,q]询问中出现的数放在一起,想求[1,x]的和,也就是求得总和和最小的q个值的和即可,无需关注具体位置。另两棵,B线段树维护冒泡序列的位置,C线段树维护权值线段树当前有哪些值。对于一个数x,记其左侧<=x的数的个数为y,那么其rank为y+1。考虑主要维护三棵树,一棵A线段树是原始序列中不在冒泡序列里的,线段树上每个位置的初始值是其左侧小于等于这个数的数的个数,查询的时候,按照值域,在两棵树叠在一起的树上一起跑即可。原创 2023-11-13 02:23:26 · 178 阅读 · 0 评论 -
Codeforces Round 890 (Div. 2) E2. PermuTree (hard version) (主席树/树状数组/差分+前缀和)
主席树需要维护lson、rson、num三个变量,num从0变1表示新增,其余非新增,每个空间1e6*20大概2e7,三个6e7,倍增也需要开1e6*20=2e7,3. 回滚时,维护一个数组记录一下操作的点号的序列,退到前一个。2. 查询时,就全局查询数的种类数,实际只需要用到根节点。,询问当前数组内的不同的数的个数(即数的种类数)1. 加数时,按照询问动态开点,在主席树上建一条链。当主席树上建一条新链的时候,在进入叶子结点前,jjleo代码/jiangly代码/官方题解。原创 2023-08-21 01:50:43 · 254 阅读 · 0 评论 -
Codeforces Round #852 (Div. 2) F. Rebrending(树状数组+动态开点线段树)
Codeforces Round #852 (Div. 2) F. Rebrending(树状数组+动态开点线段树)原创 2023-02-13 04:29:22 · 389 阅读 · 0 评论 -
Codeforces Round #675 (Div. 2) F.Boring Queries(主席树+lcm)
题目长度为n(n<=1e5)的数组a[],ai在[1,2e5]之间,q(q<=1e5)个询问,每次给出[l,r],询问[l,r]区间内的ai的lcm,本题强制在线思路来源ustze、Heltion代码题解强制在线,n=1e5,所以用主席树,主席树直接维护区间乘积,所以要将lcm引起的乘积变小的部分预先除掉,询问[l,r]的时候,直接回答r为右端点的主席树在[l,r]的区间乘积考虑lcm,对于每个质因子p来说,若区间内有两个含p的数,则lcm应该是.原创 2020-10-05 21:47:45 · 458 阅读 · 0 评论 -
洛谷P4137 Rmq Problem / mex(区间mex/主席树)
题目有一个长度为n(n<=2e5)的数组(0<=ai<=1e9)。m(m<=2e5)次询问,第i次询问给出一个区间(li,ri),询问该区间内,没有出现过的最小自然数。思路来源https://www.luogu.com.cn/problem/solution/P4137题解首先,第i棵树维护的是只考虑[1,i]的值时,值域的最右位置,贪心注意到答案只可能在[0,n]中,故直接忽略>n的ai值,令root[i]继承root[i-1],否则...原创 2020-07-11 11:56:29 · 482 阅读 · 0 评论 -
SWUST 2885.连续段(主席树)
题目给你一个长度为n的排列,每次询问由l,r构成,你需要回答区间[l,r]形成的连续段数,连续段由是由多个相邻的数构成。例如1,2,3,4为一个连续段,1,3是两个连续段.对于一个长度为5的排列为:1,3,5,2,4。询问区间为[2,4]时,连续段数量为2,即2-3与5。本题强制再线,真实的询问区间需要异或上一次答案,l=l⨁lastans,r=r⨁lastans,其中⨁表示异或运算,最开始lastans=0。询问区间不合法,即l<1或者l>r或者r>n时,忽略本次原创 2020-07-09 13:15:00 · 244 阅读 · 0 评论 -
2019 ICPC Asia Nanchang Regional K.Tree(启发式合并+动态开点线段树)
题目n(n<=1e5)个点的树,给定一个参数k(k<=1e5),代表两点距离上限点i上有一个权值询问树上有序对(x,y)的数量,满足以下条件:①x不等于y②x不是y的祖先③y不是x的祖先④x和y的距离不超过k,即⑤思路来源https://blog.csdn.net/qq_43202683/article/details/104108315题解启发式合并,然后考虑枚举到轻儿子的时候,答案如何统计,轻儿子统计的应该是重儿子子树或者已经被插入的轻儿子原创 2020-07-07 21:32:54 · 1103 阅读 · 0 评论 -
Divide by Zero 2018 and Codeforces Round #474 (Div. 1 + Div. 2, combined) F. Pathwalks(动态开点线段树)
题目n(n<=1e5)个点,m(m<=1e5)条有向边的图,有可能有重边自环,或图本身不连通,依次输入m条边的u,v,w(第i条输入的边的路径号是i),要求构造一条最长路径,使得这条路径中的路径号递增,且w是严格递增的思路来源https://blog.csdn.net/qq_39809664/article/details/79871282(map+BIT)...原创 2019-09-12 17:42:28 · 210 阅读 · 0 评论 -
hdu6191 Query on A Tree(可持久化01字典树)
题目n(n<=1e5)个点,第i个点上有个权值vi(0<=vi<=1e9)q(q<=1e5)次询问,每次询问给出u和x,要求选择u的子树的一个节点y,使得y的权值异或x最大,输出这个最大值思路来源https://www.cnblogs.com/LQLlulu/p/9496426.html题解按dfs序将树压成线性序列,子树的权值就是一段连续的...原创 2019-05-24 16:25:07 · 224 阅读 · 0 评论 -
EOJ Monthly 2018.9 (based on Trial Round #3) E.双人旋转赛车(二分+(贪心/单指针/线段树/主席树))
题目oxx 和 Xiejiadong 在玩一个双人旋转赛车的小游戏。他们将进行一些比赛。每局比赛必须按顺序进行,胜者会得到该局对应的分数xi。由于 oxx 技艺不精(每局都可以由 Xiejiadong 决定胜负),因此他给自己设置了初始分数k,希望自己能够一直领先 Xiejiadong。不过 Xiejiadong 识破了 oxx 的诡计,现在 Xiejiadong 想知道自...原创 2019-04-13 18:04:38 · 440 阅读 · 0 评论 -
hdu2665 K-th Number(主席树/区间第k大 模板题)
题意给一段序列,每次询问一段区间的第k大心得很裸的主席树了离散化之后,返回那个原值而不是rank要注意啊昨天一直wa这里,就当一个板子总结下来叭代码1#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#include<...原创 2019-02-05 14:39:10 · 185 阅读 · 0 评论 -
bzoj2588/Spoj10628 Count on a tree(主席树+lca(树链剖分))
题目给一棵树,n个节点,每个节点i有点权aim个询问,每次询问u到v这条链上第k小的值n,m<=1e5思路来源http://www.cnblogs.com/autsky-jadek/p/4422979.html心得拼板子真tm费劲本来这是个主席树的例题因为dfs2看不懂,下午去现学的树链剖分QAQ嗯dfs序的id[i]正好是主席树的那个rank[i]...原创 2019-02-05 23:57:50 · 275 阅读 · 0 评论