可持久化线段树
_beginend
这个作者很懒,什么都没留下…
展开
-
【Codeforces 1148H Holy Diver】【可持久化线段树】
题意有nnn次操作和一个空序列,每次操作在序列末尾增加一个数,并询问区间[l,r][l,r][l,r]中有多少个子区间满足其mexmexmex等于kkk。强制在线。n≤200000n\le 200000n≤200000分析从小到大枚举右端点rrr,对于每个左端点lll,维护mex(al,⋯ ,ar)mex(a_l,\cdots,a_r)mex(al,⋯,ar)的值。mex(al,⋯ ,ar)mex(a_l,\cdots,a_r)mex(al,⋯,ar)的值对于lll而言肯定是单调不升的。新原创 2020-06-28 15:58:04 · 505 阅读 · 2 评论 -
bzoj 4448: [Scoi2015]情报传递 可持久化线段树+离线
题意给出一棵树,一开始每个节点权值为0,有m次操作: 1 x y c表示询问x到y路径上的节点数和有多少个点的权值大于c 2 x表示激活节点x,在接下来的每次操作前,x的权值都会+1 n,m<=200000分析把每个点的权值设为其被激活的时间,那么询问就变成了问路径上有多少个点的权值小于某个数。由于带修改,我们可以把询问离线,求出每个点的权值后建可持久化线段树,这样就可以每次直接询问了。代码#原创 2017-10-09 10:14:32 · 274 阅读 · 0 评论 -
51nod 1440 迈克打电话 后缀数组+可持久化线段树+二分
题意有n只熊,从1到n进行编号。 第i只熊的电话号码是si。每只熊会给那些电话号码是他的子串的熊打电话(可能会给自己打)。 call(i, j) 表示第i只熊给第j只熊打电话的次数,也就是第j个串在第i个串中出现的次数。 迈克会有q次询问。每个询问中给出l,r,k,然后请您计算一下∑ri=lcall(i,k)\sum_{i=l}^rcall(i,k)。 1 ≤ n ≤ 2 × 10^5 ,原创 2017-10-25 15:41:31 · 359 阅读 · 0 评论 -
bzoj 2653: middle 可持久化线段树+二分答案
题意一个长度为n的序列a,设其排过序之后为b,其中位数定义为b[n/2],其中a,b从0开始标号,除法取下整。给你一个长度为n的序列s。回答Q个这样的询问:s的左端点在[a,b]之间,右端点在[c,d]之间的子序列中,最大的中位数。其中a分析据说这是clj的题,果然牛逼。。。一开始想到了一个主席树+分块的做法,推了一下发现时间复杂度是错的。。。 首先我们可以二分答案,设为x,然后把不小于x的数设为原创 2017-11-17 09:05:29 · 346 阅读 · 0 评论 -
bzoj 4771: 七彩树 树链的并+可持久化线段树
题意给定一棵n个点的有根树,编号依次为1到n,其中1号点是根节点。每个节点都被染上了某一种颜色,其中第i个节点的颜色为c[i]。如果c[i]=c[j],那么我们认为点i和点j拥有相同的颜色。定义depth[i]为i节点与根节点的距离,为了方便起见,你可以认为树上相邻的两个点之间的距离为1。站在这棵色彩斑斓的树前面,你将面临m个问题。每个问题包含两个整数x和d,表示询问x子树里且depth不超过dep原创 2017-12-27 21:18:42 · 483 阅读 · 0 评论 -
Codeforces 700E Cool Slogans 后缀自动机+可持久化线段树+dp
题意给你一个长度为n的字符串S,求最长的一个字符串序列a[1..k]a[1..k]满足序列中的每一个字符串都是S的子串,且对于任意的1i=k1都有a[i−1]a[i-1]在a[i]a[i]中至少出现两次。两次出现允许重叠。 问最大满足条件的k是多少。 n分析一开始也想到了类似的做法,但发现有点问题,于是就去膜lyc大爷的标。 首先想到可以dp,设f[str]表示字符串str作为a原创 2018-01-23 15:31:43 · 1782 阅读 · 1 评论 -
bzoj 4012: [HNOI2015]开店 树链剖分+可持久化线段树
题意给出一棵数,点有点权。每次询问所有点权在[L,R]之间的点到点u的距离和。强制在线。 n<=150000,Q<=200000分析如果没有点权限制的话,我们可以通过树剖线段树,来维护每个点轻儿子子树的节点数量,节点深度和以及节点数量*该点深度的和。 现在有了权值的限制,那么只要把线段树可持久化一下,每次在对应的线段树里面查询即可。代码#includ...原创 2018-03-20 18:37:59 · 290 阅读 · 0 评论 -
Codeforces 464E The Classic Problem 最短路+可持久化线段树+hash
题意有一个n个点m条边的无向图,每条边形如(u,v,w),表示u到v有一条长为2w2w2^w的边,问两点间的最短路。 n,m,w≤105,n,m,w≤105,n,m,w\le10^5,分析直接上dij,考虑用可持久化线段树来维护到每一个点的最短路的01串。 如果要比较两个串的大小时,就对线段树每个节点维护一个hash值,然后找到从高位到低位的第一个不同位即可。 当要加入一个1...原创 2018-04-08 15:15:12 · 546 阅读 · 0 评论 -
bzoj 5157: [Tjoi2014]上升子序列 dp+可持久化线段树
题意给出一个序列,问序列中有多少个本质不同的上升子序列。 n<=100000n<=100000nf[i]=∑i−1j=ls[i]+1f[j]∗[a[j]<a[i]]f[i]=∑j=ls[i]+1i−1f[j]∗[a[j]<a[i]]f[i]=\sum_{j=ls[i]+1}^{i-1}f[j]*[a[j]...原创 2018-03-26 11:03:13 · 236 阅读 · 0 评论 -
bzoj 4571: [Scoi2016]美味 贪心+可持久化线段树
题意一家餐厅有 n 道菜,编号 1…n ,大家对第 i 道菜的评价值为 ai(1≤i≤n)。有 m 位顾客,第 i 位顾客的期望值为 bi,而他的偏好值为 xi 。因此,第 i 位顾客认为第 j 道菜的美味度为 bi XOR (aj+xi),XOR 表示异或运算。第 i 位顾客希望从这些菜中挑出他认为最美味的菜,即美味值最大的菜,但由于价格等因素,他只能从第 li 道到第 ri 道中选择。请你...原创 2018-03-26 18:57:02 · 258 阅读 · 0 评论 -
LibreOJ #6276.果树 dsu on tree+可持久化线段树
题意给出一棵树,每个点有一种颜色。问有多少条路径满足路径上任意两点的颜色都不同。 n≤105n≤105n\le10^5,满足每种颜色至多出现20次。分析题解的做法很棒棒啊,设dfn[x]dfn[x]dfn[x]表示xxx的dfsdfsdfs序,就是把每条路径(u,v)(u,v)(u,v)看成平面上的一个点对(dfn[u],dfn[v])(dfn[u],dfn[v])(dfn[u]...原创 2018-04-21 13:54:57 · 514 阅读 · 0 评论 -
LibreOJ #2551.「JSOI2018」列队 可持久化线段树
题意 n,m≤5∗105,1≤K,ai≤106,ain,m≤5∗105,1≤K,ai≤106,ain,m\le5*10^5,1\le K,a_i\le10^6,a_i两两不同。分析只需考虑每一个数的系数是1还是-1。设区间内的学生按坐标从小到大排序后为a1,a2,...,aka1,a2,...,aka_1,a_2,...,a_k,要求集合的区间为[l,r][l,r][l,r],不...原创 2018-05-17 15:12:10 · 373 阅读 · 0 评论 -
bzoj 5361: [Lydsy1805月赛]对称数 可持久化线段树
题意给一棵树,点有点权,每次询问一条链上最小的出现偶数次的正整数。 n,m≤200000n,m≤200000n,m\le200000分析按照套路,我们先给每个数随机一个unsigned long long范围内的权值,然后考虑二分答案,显然若位于[l,r][l,r][l,r]中的数的权值异或和等于区间内每个数权值的异或和,则区间中每个数都恰好出现奇数次,反之则存在某个数出现偶数次...原创 2018-05-27 20:50:36 · 369 阅读 · 0 评论 -
uoj #218.【UNR #1】火车管理 可持久化线段树
题意有n个栈,现在要资瓷以下操作: 1 l r询问编号在[l,r]之间的栈的栈顶的和 2 l对编号为l的栈进行一次pop操作 3 l r x对编号在[l,r]之间的栈进行一次push(x)操作 n,q≤500000n,q≤500000n,q\le500000分析这题的extra test卡空间真的是丧心病狂,在卡空间的时候还出现了同一个程序有时可以跑有时会re的神奇情况,简...原创 2018-06-26 17:09:20 · 351 阅读 · 0 评论 -
bzoj 4026: dC Loves Number Theory 可持久化线段树
题意给出一个长度为n的序列A,有q个询问,每次询问φ(区间所有数的乘积的)\varphi(区间所有数的乘积的)。强制在线。 n<=50000,q<=100000,Ai<=1000000分析又学到了新姿势。首先考虑如何强制在线求一个区间内不同数的个数。 我们对序列建可持久化线段树,线段树下标表示位置而不是权值。对于位置i上的数x,我们把i的可持久化线段树上的位置i加上1。对于上一个出现了x的位置j原创 2017-09-16 09:12:17 · 374 阅读 · 0 评论 -
bzoj 3123: [Sdoi2013]森林 启发式合并+可持久化线段树
题意:给出一片森林,每个点有点权,要求资瓷两个操作:询问两点间路径的第k小点权;加一条边分析:如果没有合并操作的话就是裸的可持久化线段树啦。但既然有合并操作那么我们就每次把两个块的可持久化线段树进行启发式合并。何为启发式合并呢,其实就是暴力合并,把小一点的那棵树上的主席树全部进行重建,看上去很暴力,可据说可以证明复杂度均摊logn,反正我是不会证了……这题调死宝宝了~~原创 2016-09-24 11:10:30 · 423 阅读 · 0 评论 -
bzoj 3674: 可持久化并查集加强版 可持久化线段树
题意n个集合 m个操作 操作: 1 a b 合并a,b所在集合 2 k 回到第k次操作之后的状态(查询算作操作) 3 a b 询问a,b是否属于同一集合,是则输出1否则输出0 请注意本题采用强制在线,所给的a,b,k均经过加密,加密方法为x = x xor lastans,lastans的初始值为0 0分析用可持久化线段树维护fa数组即可。 并查集不能路径压缩要按秩合并。代码#incl原创 2016-12-21 17:20:47 · 612 阅读 · 0 评论 -
bzoj 3932: [CQOI2015]任务查询系统 可持久化纤段树
题意最近实验室正在为其管理的超级计算机编制一套任务管理系统,而你被安排完成其中的查询部分。超级计算机中的 任务用三元组(Si,Ei,Pi)描述,(Si,Ei,Pi)表示任务从第Si秒开始,在第Ei秒后结束(第Si秒和Ei秒任务也在运行 ),其优先级为Pi。同一时间可能有多个任务同时执行,它们的优先级可能相同,也可能不同。调度系统会经常向 查询系统询问,第Xi秒正在运行的任务中,优先级最小的Ki原创 2017-02-13 19:45:05 · 360 阅读 · 0 评论 -
bzoj 3489: A simple rmq problem 可持久化线段树套可持久化线段树
题意给出n个数,每个数为[1,n],有m个询问,每次询问[l,r]内最大的只出现过一次的数。强制在线。 n<=100000,m<=200000分析一开始还以为是分块,但想了想发现不可做,然后想了一下主席树什么的也还是不会做,就只好去看题解了。然后发现有好多神奇的做法,像KDtree,树套树,树套堆等,但我到现在还不会怎么用树套堆来做。先求出每一个位置的next和last分别表示前面第一个和它的数一原创 2016-11-30 20:46:27 · 447 阅读 · 0 评论 -
bzoj 4477: [Jsoi2015]字符串树 可持久化线段树
题意给出一棵树,每条边上都有一个长度不超过10的字符串。给出m个询问x y ch,求x到y的路径有多少个字符串的前缀是ch。 n,m<=100000n,m<=100000分析将每个字符串用一个map离散化,然后在树上建可持久化线段树即可。代码#include<iostream>#include<cstdio>#include<cstdlib>#include<cstring>#includ原创 2017-03-09 15:34:25 · 681 阅读 · 0 评论 -
bzoj 2006: [NOI2010]超级钢琴 可持久化线段树+优先队列
题意小Z是一个小有名气的钢琴家,最近C博士送给了小Z一架超级钢琴,小Z希望能够用这架钢琴创作出世界上最美妙的音乐。 这架超级钢琴可以弹奏出n个音符,编号为1至n。第i个音符的美妙度为Ai,其中Ai可正可负。 一个“超级和弦”由若干个编号连续的音符组成,包含的音符个数不少于L且不多于R。我们定义超级和弦的美妙度为其包含的所有音符的美妙度之和。两个超级和弦被认为是相同的,当且仅当这两个超级和弦所包含的音原创 2017-04-10 15:16:10 · 413 阅读 · 0 评论 -
bzoj 4556: [Tjoi2016&Heoi2016]字符串 后缀数组+可持久化线段树
题意给出一个长度为n的字符串,有m个询问a b c d表示求s[a..b]的子串和s[c..d]的最长公共前缀的最大值。 n,m<=100000分析先求一波后缀数组,然后考虑二分答案,将其转变成判定性问题。 设当前长度为len,那么我们可以在height数组内找到一个区间[L,R],使得该区间内的任何下标与s[c..d]的最长公共前缀不小于len。 然后我们可以对rank数组建一棵可持久化线段原创 2017-04-05 21:40:15 · 429 阅读 · 0 评论 -
bzoj 3514: Codechef MARCH14 GERALD07加强版 lct+可持久化线段树
题意N个点M条边的无向图,询问保留图中编号在[l,r]的边的时候图中的联通块个数。 1≤N、M、K≤200,000。强制在线分析比较巧妙的一道题。首先我们把边依次加入,然后每次不能加时就把该边所在路径上编号最小的边弹出,设为ls[i]。特别的,当其可以加入时,ls=0.这个显然可以用lct完成。 然后我们要求区间[l,r]中的联通块个数,就相当于求n-ls[l..r]中有多少个值小于l。 证明原创 2017-06-03 20:45:17 · 377 阅读 · 0 评论 -
bzoj 3681: Arietta 主席树优化建图+网络流+dsu on tree
题意所有的 n 个音符形成一棵由音符 C ( 1 号节点) 构成的有根树,每一个音符有一个音高 Hi 。 Arietta 有 m 个力度,第 i 个力度能弹出 Di 节点的子树中,音高在 [Li,Ri] 中的任意一个音符。 为了乐曲的和谐,Arietta 最多会弹奏第 i 个力度 Ti 次。 Arietta 想知道她最多能弹出多少个音符。 1 ≤ n, m ≤ 10000 。对于所有数...原创 2017-06-19 21:18:22 · 734 阅读 · 3 评论 -
bzoj 3218: a + b Problem 最小割+可持久化线段树
1原创 2017-07-07 22:07:26 · 340 阅读 · 0 评论 -
bzoj 3551: [ONTAK2010]Peaks加强版 Kruskal重构树+可持久化线段树
题意同bzoj3545,题解,强制在线。分析一开始yy出了一种用可持久化线段树来维护可持久化的root数组,然后其他的就像离线那样,只是每次合并线段树的时候不改变原来两棵树的儿子,而是新建节点。恩理论上好像是可以的,但是懒得写。这题可以用一种叫Kruskal重构树的东西来搞,具体看PoPoQQQ大爷的题解。 大概就是说一开始新图中没有边,做小生成树的时候,每次加入一条新边(u,v,w),就在新图中原创 2017-07-26 17:00:16 · 828 阅读 · 0 评论