![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构-线段树
Dream_Lolita
退役OIer,转战ACM
展开
-
【贪心 / 线段树模拟费用流增广】BZOJ4977 [Lydsy八月月赛] 跳伞求生
贪心的思想比较简单。但是线段树模拟费用流增广的思想要学习qwq原创 2018-02-09 22:53:39 · 857 阅读 · 0 评论 -
【贪心+线段树维护DP】AGC001F Train Service Planning
【题目】Atcoder题目有点复杂。有n+1n+1n+1个车站编号为0∼n0\sim n0∼n,以及nnn条轨道连接第i−1i-1i−1和第iii个车站,通过它要花费aia_iai的时间。同时轨道可能是单向或双向的,双向可以同时允许两个方向列车行驶,单向在一个时间只允许一辆车在上面运行(没有车时可以改变方向)现在要求运行从000到nnn的列车和从nnn到000的列车,满足(以下以前者为栗...原创 2019-03-12 22:08:44 · 364 阅读 · 0 评论 -
【set+线段树】CF833E Caramel Clouds
【题目】Codeforces有nnn个线段覆盖区间[li,ri][l_i,r_i][li,ri],移除它花费cic_ici,你有CCC的花费上限。QQQ次询问一个值xxx,在至多移除两条线段且花费不超过上限的情况下,求一个最小的yyy满足[0,y][0,y][0,y]没有被覆盖的区间长度大于等于xxx。n,Q≤3×105,li,ri,ci≤109n,Q\leq 3\times 10^5...原创 2019-03-12 22:06:07 · 302 阅读 · 0 评论 -
【阈值+SA+倍增+主席树】BZOJ5304 [HAOI2018] 字串覆盖
【题目】lydsy给定两个字符串A,BA,BA,B以及一个参数KKK,有QQQ次询问每次给定(s,t,l,r)(s,t,l,r)(s,t,l,r),令T=A[s…t],P=B[l…r]T=A[s\dots t],P=B[l\dots r]T=A[s…t],P=B[l…r],每次若TTT的一个子串与PPP相同,就可以删掉TTT的这个子串然后获得K−iK-iK−i的收益,其中iii为初始AAA中这...原创 2019-03-13 21:56:32 · 259 阅读 · 0 评论 -
【线段树维护历史值/莫队】BZOJ4540 [Hnoi2016] 序列
【题目】BZOJ给定一个长度为nnn的序列aaa,QQQ次询问一段区间中所有连续子序列的最小值之和。n,Q≤105,ai≤109n,Q\leq 10^5,a_i\leq 10^9n,Q≤105,ai≤109【解题思路】这个标记是真的神奇啊。不妨令fi,jf_{i,j}fi,j表示左端点为iii,右端点为jjj的区间最小值。如果我们枚举右端点来更新这个数组,不难发现就是一个区间覆盖。...原创 2019-03-03 20:51:27 · 240 阅读 · 0 评论 -
【树上操作+主席树】BZOJ4539 [Hnoi2016] 树
【题目】给定一棵nnn个点的模板树,并将其复制一份称为大树。接下来进行mmm次操作,每次操作将模板树中以aia_iai为根的子树复制一遍挂到大树中bib_ibi的下方。然后将新加入的子树按顺序进行重编号(编号相对顺序不变)接下来QQQ次询问,大树上uiu_iui到viv_ivi的距离。n,m,Q≤105n,m,Q\leq 10^5n,m,Q≤105,每个时候大树节点总数不超过101...原创 2019-03-03 20:48:07 · 141 阅读 · 0 评论 -
【DSU ON TREE优化空间+线段树合并】HDU5511 Minimum Cut-Cut
【题目】HDU给定一幅nnn个点mmm条边的无向图以及这个无向图的一棵生成树,非树边的lcalcalca均为111。求一个最小的割满足割去恰好两条树边,多组数据。n≤2×104,m≤105,T≤25n\leq 2\times 10^4,m\leq 10^5,T\leq 25n≤2×104,m≤105,T≤25【解题思路】割树边的方式有两种情况:割了两条存在祖先关系的,或割了两条没有祖先...原创 2019-02-20 21:53:29 · 233 阅读 · 0 评论 -
【树链剖分+差分】CC_DGCD Dynamic GCD
【题目】Codechef给定一棵nnn个点的点权树,mmm次操作询问一条路径上所有数的gcdgcdgcd将一段路径的点权加上ddd【解题思路】首先考虑序列上的问题。我们处理gcdgcdgcd有一个辗转相减法,即gcd(a,b)=gcd(b−a,b)gcd(a,b)=gcd(b-a,b)gcd(a,b)=gcd(b−a,b)。于是我们维护一个原序列和一个差分序列,其中差分序列用线段...原创 2019-02-25 22:05:56 · 284 阅读 · 0 评论 -
【树剖+线段树+堆/整体二分+BIT】BZOJ4538 [Hnoi2016] 网络
【题目】BZOJ给定一棵nnn个点的树,支持三种操作:给树的一条路径打上一类标记删去一类标记求未经过某个点的所有标记的最大权值。n,Q≤2×105n,Q\leq 2\times 10^5n,Q≤2×105【解题思路】如果我们二分答案,那么问题就变成了求是否所有权值大于等于KKK的路径都没有经过某个节点。这个问题可以利用树上差分,在(u,v)(u,v)(u,v)打上+1+1+1...原创 2019-03-01 11:42:19 · 158 阅读 · 0 评论 -
【线段树】LOJ3043 [ZJOI2019] 线段树
【题目】LOJ初始有一棵线段树,没有标记,对于一次操作[l,r][l,r][l,r],将所有线段树复制一份,对于奇数标号的所有线段树,我们像普通线段树一样给区间打上标记,pushdown\text{pushdown}pushdown函数会将标记下放并将这个节点的标记情况。每次询问所有拥有的线段树一共有多少个节点有标记。n,Q≤105n,Q\leq 10^5n,Q≤105【解题思路】对于每...原创 2019-04-03 21:50:18 · 369 阅读 · 0 评论 -
【CF套题】Codeforces Round #539 (Div. 1) (Round1109)
【前言】数据结构写得很爽啊。【题目】原题地址A.Sasha and a Bit of Relax给定一个数列aia_iai,问有多少个长度为偶数的区间满足前一半数和后一半数字异或和相等。n≤3×105,ai≤220n\leq 3\times 10^5,a_i\leq 2^{20}n≤3×105,ai≤220【解题思路】卡了一会woc设sis_isi表示前缀异或和,假设一个区...原创 2019-04-01 22:07:38 · 378 阅读 · 0 评论 -
【扫描线+置换结论】LOJ3085「GXOI / GZOI2019」特技飞行
【题目】LOJ有nnn架飞机从起点飞到终点,对地速度相同。每当两架飞机飞到同一点,可以选择交换飞行路线(对向交换)或继续原路线(擦肩而过),分别有aaa和bbb的得分。另外有kkk个观测点(pi,qi)(p_i,q_i)(pi,qi),可以观测到曼哈顿距离它不超过rir_iri的区域。若两架飞机飞到同一点时被至少一个观测点观测到,则会额外获得ccc的得分。现在要求到达终点时飞机相对顺序...原创 2019-04-22 16:16:52 · 351 阅读 · 0 评论 -
【线段树+堆】CC_SEGMENTQ Segment Queries
【题目】CC一条长度为nnn的数轴,每个整点初始未被标记,要求支持两种操作:若[l,r][l,r][l,r]存在未被标记的整点,加入一条线段[l,r][l,r][l,r]标记一个整点,输出有多少条线段在标记整点后,线段范围内的点全部被标记。一个点不会被重复标记。n,Q≤106n,Q\leq 10^6n,Q≤106,要求强制在线。【解题思路】考虑标记一个点xxx会对哪些线段产生影响...原创 2019-04-22 15:37:04 · 218 阅读 · 0 评论 -
【树链剖分+可持久化线段树】CC_QUERY Observing the Tree
【题目】CC给定一棵nnn个点的带点权树,支持链加等差数列,求链和,回到第xxx次修改的版本。n,m≤105n,m\leq 10^5n,m≤105【解题思路】练手(毒瘤)题。没有回退操作的话就是一些基本操作了,维护一下斜率和截距就可以了。有回退的话再可持久化一下就好了。【解题思路】#include<bits/stdc++.h>using namespace std;...原创 2019-04-25 21:48:16 · 264 阅读 · 0 评论 -
【线段树+单调栈维护DP】LOJ2773 「ROI 2017 Day 2」学习轨迹
【题目】LOJ有两所学校,第一所学校有nnn门课程,编号分别是a1,…,ana_1,\dots ,a_na1,…,an,课程质量xix_ixi。第二所学校有mmm门课程,编号分别是b1,…,bmb_1,\dots,b_mb1,…,bm,课程质量yiy_iyi。两所学校开设课程编号可能相同。现在可以在分别学校学习连续一段课程,比如al,al+1,…,ara_{l},a_{l+1},...原创 2019-04-25 21:46:20 · 732 阅读 · 0 评论 -
【SAM+线段树合并】LOJ2479 [九省联考 2018] 制胡窜
【题目】LOJ给定一个字符串SSS,有QQQ次询问,每次给出一个字符串Sl,rS_{l,r}Sl,r,求有多少对(i,j)(i<j)(i,j)(i<j)(i,j)(i<j)满足将SSS从这里断开后,至少有一段存在Sl,rS_{l,r}Sl,r。(有n−1n-1n−1个可行的断点)n≤105,Q≤3×105n\leq 10^5,Q\leq 3\times ...原创 2019-04-15 21:20:13 · 271 阅读 · 0 评论 -
【主席树】CC_PREFIXOR Prefix XOR
【题目】CC给定一个长度为nnn的序列aaa,有qqq个询问[l,r][l,r][l,r],回答区间内满足前缀异或和单调不降的区间[i,j][i,j][i,j]有多少个。强制在线。n≤4×105,ai≤109n\leq 4\times 10^5,a_i\leq 10^9n≤4×105,ai≤109【解题思路】根据套路,我们首先肯定是求一个前缀异或和,然后要求sj⊕si−1≥sj−1⊕s...原创 2019-04-15 21:18:29 · 243 阅读 · 0 评论 -
【线段树】LOJ6576 线段树经典题
【前言】雅礼集训的时候讲题人放出来的题,但没有原题,于是机房几个人写了拍了。【题目】你需要写一个数据结构维护长度为nnn的三个序列A,B,CA,B,CA,B,C,支持:对于i∈[l,r]i\in[l,r]i∈[l,r],令Ai=min(Ai,x)A_i=\min (A_i,x)Ai=min(Ai,x)对于i∈[l,r]i\in [l,r]i∈[l,r],令Ai=Ai+xA_i=A...原创 2019-04-08 15:16:28 · 597 阅读 · 0 评论 -
【主席树+哈希】CC_WALKBT Walks on the binary tree
【题目】CC一棵高度为nnn的满二叉树,节点数为2n+1−12^{n+1}-12n+1−1,用一个[0,2n−1][0,2^n-1][0,2n−1]的整数XXX表示一条根到叶子的路径,从最高位开始若为000则走左儿子否则走右儿子。初始X=0X=0X=0,仅访问根节点,要求支持两种操作:将XXX改成(X+2C) mod 2n(X+2^C)\text{ mod } 2^n...原创 2019-04-08 15:21:17 · 489 阅读 · 0 评论 -
【双树问题-树剖+线段树合并】CC_EDGEST Edges in Spanning Trees
【题目】Codechef给定相同点集(大小为nnn)上两棵生成树T1,T2T_1,T_2T1,T2。对于T1T_1T1中每条边,求T2T_2T2中有多少条边满足:T1−e1+e2T_1-e_1+e_2T1−e1+e2(从T1T_1T1中删去e1e_1e1再加上e2e_2e2)是一棵生成树T2−e2+e1T_2-e_2+e_1T2−e2+e1是一棵生成树n≤2...原创 2019-02-22 21:52:42 · 496 阅读 · 0 评论 -
【线段树+MST】BZOJ5216 [Lydsy2017省队十连测] 公路建设
【题目】BZOJnnn个点mmm条边的无向图,QQQ次询问只用编号在[l,r][l,r][l,r]中的边形成的最小生成树(森林)花费。n≤100,m≤105,Q≤15000n\leq 100,m\leq 10^5,Q\leq 15000n≤100,m≤105,Q≤15000【解题思路】每个区间有用的边数至多nnn条,由于nnn很小,我们可以用线段树维护区间有用的边,区间合并时暴力归并即可...原创 2019-02-10 22:43:20 · 184 阅读 · 0 评论 -
【广义SAM+线段树合并】CF666E Forensic Examination
【题目】原题地址给定一个模式串SSS和nnn个匹配串TiT_iTi。qqq个询问形如(l,r,pl,pr)(l,r,pl,pr)(l,r,pl,pr),问S[pl…pr]S[pl\dots pr]S[pl…pr]在Tl…TrT_l\dots T_rTl…Tr中哪个出现了最多次(可重叠),输出这个次数和是哪个串。∣S∣,q≤5×105,n,∑∣T∣≤5×104|S|,q\leq 5\ti...原创 2018-12-18 14:22:18 · 370 阅读 · 0 评论 -
【树链剖分】BZOJ2896 桥
【题目】原题地址给定一幅nnn个点mmm条边的无向图,两种操作删除一条边询问两点间有多少条边是桥边n≤3×104,m≤105,Q≤4×105n\leq 3\times 10^4,m\leq 10^5,Q\leq 4\times 10^5n≤3×104,m≤105,Q≤4×105【解题思路】首先考虑暴力,我们每次删边后,将图的边双缩起来,那么两点间桥的数量就是这两点所在边双在树上的...原创 2018-12-15 22:14:32 · 216 阅读 · 0 评论 -
【线段树+思维】CF1083C Max Mex
【题目】原题地址给定一棵nnn个点的树,每个点分别有000~n−1n-1n−1的点权。有qqq个操作:询问树上所有路径中最大的mexmexmex是多少将两个点的点权交换。n,q≤2×105n,q\leq 2\times 10^5n,q≤2×105【解题思路】由mexmexmex的定义,我们知道我们只需要知道前iii个权是否在一条路径上,这个显然是满足二分性的,那么问题就在于如何维...原创 2018-12-12 14:53:11 · 659 阅读 · 0 评论 -
【生成函数+拉格朗日插值+整体DP+线段树合并】LGP4365 [九省联考2018]秘密袭击coat
【题目】原题地址给定一棵NNN个节点的树,点权1∼W1 \sim W1∼W,求树的每一个连通块的第KKK大点权之和。【解题思路】以下均来自这里首先可以转化一下题目。Ans=∑S∈Tkth&amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;nbsp;of&amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;nbsp;S=∑i=1Wi×∑S∈T[kth&amp原创 2018-10-24 21:45:44 · 677 阅读 · 0 评论 -
【线段树合并+虚树/启发式合并/欧拉序】LOJ2722 NOI2018情报中心
【题目】原题地址给定一棵带边权树和树上的mmm条链,每条链有一个花费cic_ici,两条有边交的链的价值定义为:链并的边权和-两条链的花费。求最大价值。(需要用一个logloglog的做法)【题目分析】这题是SCSCSC在看,我跑过去凑热闹,然后我们搞了一个星期…\dots…两个部分都搞出了一个可行的做法,然后看题解…\dots…震惊,还能这样做。【解题思路】题目给出了S1(lca...原创 2018-09-26 14:02:55 · 743 阅读 · 0 评论 -
【扫描线+线段树】BZOJ5392 路径统计 [BZOJ2018JUN月赛]
【题目】原题地址大意:求有多少个树上点对(u,v)(u,v)(u,v)满足这条路径上经过的所有点排序后恰好为连续的一段,这里(u,v)和(v,u)(u,v)和(v,u)(u,v)和(v,u)算作同一情况【解题思路】 这道题目的思想挺妙的。 我们很容易可以得到一个O(nlog2n)O(nlog2n)O(nlog^2n)的常数比较大的做法,但很可惜这题过不了。 简单说一下:考虑一...原创 2018-06-27 10:19:56 · 501 阅读 · 0 评论 -
【扫描线+线段树+堆】Codeforces 983D Arkady and Rectangles
【题目】 原题地址 题目大意: 在一个白色平面内依次放入n种不同颜色的矩形(可以覆盖),全部放入后能看到多少种不同颜色的矩形(包括平面的白色)。【解题思路】 这道题真是一道很不错的数据结构题,想了茫茫久……当然应该是因为我太弱了。 首先离散化什么的就不用多说了。我们考虑能看见一个矩形的条件,如果我们按xxx轴做扫描线,那么实际上就是要看这个矩形是否在某一个xxx上有出现过。 怎...原创 2018-06-08 14:27:00 · 390 阅读 · 0 评论 -
【二分答案+线段树+平衡树/线段树分治】APIO2018新家
【题目】 原题地址 题目大意:太长了去看题面吧。【题目分析】 一道看上去比较奇怪的题目,需要一定转化思想。 不过二分答案这个点还是比较显然的。【解题思路】 对时间扫描的话,每间商店等价于插入操作和删除操作。 问题转化为支持插入/删除,询问以某个位置为重心包含所有不同数字的最小长度。 对于询问,显然我们可以二分答案。但是如何查询一个区间内是否出现所有种类的数? 考虑出现的充要...原创 2018-06-14 21:11:40 · 819 阅读 · 4 评论 -
【SAM+线段树合并】LGP4770 [NOI2018]你的名字
【题目】原题地址给定一个字符串SSS,多组询问给定字符串TTT以及两个数字l,rl,rl,r。求S[l..r]S[l..r]S[l..r]中有多少个子串xxx满足:xxx的任意一个子串没有在TTT中出现过。∣S∣,∑∣T∣≤5×105|S|,\sum |T| \leq 5\times 10^5∣S∣,∑∣T∣≤5×105【解题思路】加深对SAM\text{SAM}SAM的理解。既然是字符...原创 2018-12-24 16:48:11 · 555 阅读 · 0 评论 -
【树链剖分+线段树】CF960H Santa's Gift
【题目】原题地址给定一棵nnn个节点的有根树和一个参数CCC,每个节点有一个编号fif_ifi,范围为1∼m1\sim m1∼m,每种编号有一个权值cic_ici,有两种操作:修改一个点的编号给出xxx,记cnticnt_icnti为树中节点iii子树中编号为xxx的节点个数,求∑i=1n(cnti⋅cx−C)2n\frac {\sum_{i=1}^n(cnt_i\cdot c_x...原创 2019-01-05 10:39:26 · 289 阅读 · 1 评论 -
【数据结构优化贪心】LOJ2710 [BalkanOI 2018 Day1] Election
【题目】LOJ一个长度为nnn的序列,有CT\text{CT}CT两种字母。QQQ次询问给定l,rl,rl,r,问最少去掉多少个字母,使得区间前缀后缀的T\text{T}T数量均不超过C\text{C}C的数量。n≤5×104n\leq 5\times 10^4n≤5×104【解题思路】我们先考虑一种朴素的贪心,以下设第iii位为C\text{C}C时ai=1a_i=1ai=1,否则a...原创 2019-02-16 22:10:30 · 557 阅读 · 0 评论 -
【哈希+主席树】CC_CLONEME Cloning
【题目】Codechef给定一个序列aaa,QQQ次询问若将[l,r][l,r][l,r],[L,R][L,R][L,R]排序后,两个区间内对应的位置是否至多有一个不同(称之为相似)。n,ai,Q≤105n,a_i,Q\leq 10^5n,ai,Q≤105【解题思路】如果问的是排序后是否相同,那么实际上要问的就是区间数字出现个数是否相同。由于在数值上有可减性,我们不妨对权值建线段树,然...原创 2019-02-22 08:29:13 · 250 阅读 · 0 评论 -
【最短路优化建图(dij)+线段树】BZOJ4699 树上的最短路
【题目】BZOJ一棵nnn个节点的无向树,边有边权。另有mmm条通道,形如(a,b,c,d,v)(a,b,c,d,v)(a,b,c,d,v),表示(a,b)(a,b)(a,b)路径上所有点向(c,d)(c,d)(c,d)路径上所有点都连了一条边权为vvv的有向边。求任意节点出发到达KKK的最短路。n≤2.5×105,m≤105n\leq 2.5\times 10^5,m\leq 10^5n≤...原创 2019-02-04 22:25:10 · 548 阅读 · 0 评论 -
【泛刷题】HNOI2018 (BZOJ5285~5290)
【题目】BZOJluoguBZOJ5285 寻宝游戏表示想不到正解啊。暴力从后往前BFS\text{BFS}BFS结果,考虑枚举当前操作时对前面操作的影响(最后的值固定,或继承前面的值),一共有888种情况。然后可以发现当一位不合法或全部位都任意时可以剪枝,这样每一层状态数最多为222,于是复杂度就是O(nmqω)O(\frac {nmq} {\omega })O(ωnmq)然后你发...原创 2019-01-22 22:17:08 · 191 阅读 · 0 评论 -
【SAM套路/AC自动机+主席树】CF547E Mike and Friends
【题目】CF给定nnn个串aia_iai,QQQ组询问al∼ara_l\sim a_ral∼ar中axa_{x}ax出现了多少次。∑∣ai∣≤2×105,Q≤5×105\sum |a_i| \leq 2\times 10^5,Q\leq 5\times 10^5∑∣ai∣≤2×105,Q≤5×105【解题思路】这种东西显然SAM\text{SAM}SAM线段树合并就可以做了吧。...原创 2019-01-26 14:34:04 · 768 阅读 · 0 评论 -
【思维题+线段树合并】UOJ418 【集训队作业2018】三角形
【题目】原题地址一棵nnn个节点的有根树,每个节点有权值wiw_iwi。有两种操作:从手中取wiw_iwi个石子放在iii节点上,此操作要求所有儿子jjj上都有wjw_jwj个石子将节点iii上的石子收回手中对于每个节点iii,为了在iii上放wiw_iwi个石子,手上至少要有多少个石子。n≤105,wi≤109n\leq 10^5,w_i\leq 10^9n≤105,wi...原创 2019-01-15 21:33:27 · 1652 阅读 · 0 评论 -
【LCT+SAM+线段树】LOJ6041 事情的相似度
【题目】原题地址给定一个010101串sss,定义pi=s[1…i]p_i=s[1\dots i]pi=s[1…i]。多组询问l,rl,rl,r表示询问l≤i&lt;j≤rl\leq i&lt;j\leq rl≤i<j≤r,lcs(pi,pj)lcs(p_i,p_j)lcs(pi,pj)的最大值。【解题思路】在SAM\text{SAM}SAM上,两个节点的LC...原创 2019-01-24 20:18:14 · 446 阅读 · 0 评论 -
【整体二分+线段树合并+tarjan】LGP5163 WD与地图
【题目】原题地址给定一幅有向图,支持三种操作:删去一条边给一个点权值增加xxx求xxx点所在强连通分量权值前kkk大的和。n,m,q≤105n,m,q\leq 10^5n,m,q≤105【解题思路】我好像不是很会做啊(其实是自己s*了)。首先倒序操作,那么删边可以变成加边。一个naive\text{naive}naive的做法是我们对每个点维护一棵权值线段树,每次增加一条边(...原创 2019-01-02 16:34:34 · 207 阅读 · 0 评论 -
【DFS序+线段树】CF1132G Greedy Subsequences
【题目】CF给定一个长度为nnn的序列aaa,问每个长度为KKK的连续区间的最长贪心上升子序列有多长。贪心上升子序列是指每个数找到它后面第一个比它大的数作为后继子序列。n≤106n\leq 10^6n≤106【解题思路】开始看错题了,以为就是区间最长上升子序列,然而正确的题目似乎性质更显然了。我们按题意进行连边会形成一个森林,再新建一个节点作为超级根。那么实际上对于每个询问的区间来...原创 2019-04-27 11:49:13 · 180 阅读 · 0 评论