
线段树
文章平均质量分 81
Hexrt
南昌航空大学软件学院,ACMerRetired。
求知若渴,虚心若愚。
傲慢与偏见才是进步的最大阻碍。
展开
-
看错题(赛氪冬季赛)【线段树】
传送门题意给定一个能够满足是完全二叉树的线段树能够在线段树上区间加值,每次询问求整棵树的价值价值定义为∑u∑w,w∈u➡1路径上的节点值,u∈线段树叶子节点\sum_u{\sum{w},w\in u➡1路径上的节点值},u \in线段树叶子节点∑u∑w,w∈u➡1路径上的节点值,u∈线段树叶子节点分析数据范围较大,需要在区间求和的过程中,动态维护其价值一开始建树的时候,可以预先求出价值ans=∑uvalu∗lenu,u∈所有线段树节点ans=\sum_u{val_u*len_u},u \in原创 2022-03-28 18:57:48 · 1671 阅读 · 0 评论 -
F - LIS on Tree【二分OR权值线段树】
传送门 atcoder F - LIS on Tree题意给定一颗树,求节点111到各个节点路径上的最长上升子序列的长度分析之前只知道对序列进行二分nlognnlognnlogn的做法给定一个数组1 4 3 6 2 5 8 7 8 9当前数114143136136212651258125871257812578原创 2022-03-07 20:51:35 · 249 阅读 · 0 评论 -
P3380 【模板】二逼平衡树(树套树)
传送门查询 kkk 在区间内的排名查询区间内排名为 kkk的值修改某一位值上的数值查询 kkk 在区间内的前驱(前驱定义为严格小于 xxx,且最大的数,若不存在输出 −2147483647-2147483647−2147483647)查询 kkk 在区间内的后继(后继定义为严格大于 xxx,且最小的数,若不存在输出 214748364721474836472147483647)分析对于静态区间第K大来说,那就上主席树吧如果动态的话,就树套树了如果是双动态的话,那就树套树套树了(大雾)原创 2021-09-14 18:56:05 · 127 阅读 · 0 评论 -
P5490 【模板】扫描线
传送门扫描线模板分析逃不掉,总该要学的。学完后,发现思想不难,早干嘛去了大概说一下核心要义 扫描&&线段定义一根线,从下往上扫因为矩形的话,肯定在竖直方向有一段是连续的(也就是有个高,已知)如果要知道某一小段的面积,我们需要知道长度为多少?那么我们就可以使用线段树维护这个长度长度的定义为,只要有一个矩形贡献了一段长度,这一段的长度就已经有了,不会因为矩形个数增加把所有长度都统计起来,最后乘以高度即可接下来如何维护如果一个矩形的两个x相同,说明没有面积,面积为 000原创 2021-09-14 17:25:53 · 152 阅读 · 0 评论 -
bzoj4372. 烁烁的游戏【动态点分治】
背景:烁烁很喜欢爬树,这吓坏了树上的皮皮鼠。题意:给定一颗$n$个节点的树,边权均为$1$,初始树上没有皮皮鼠。烁烁他每次会跳到一个节点$u$,把周围与他距离不超过d的节点各吸引出$w$只皮皮鼠。皮皮鼠会被烁烁吸引,所以会一直待在节点上不动。烁烁很好奇,在当前时刻,节点 $u$ 有多少个他的好朋友---皮皮鼠。大意:给一颗$n$个节点的树,边权均为 $1$,初始点权均为 $0$,$m$ 次操作:$Q$ $x$:询问 $x$ 的点权。$M$ $x$ $d$ $w$:将树上与节点 $x$ 距离原创 2021-09-01 17:47:37 · 304 阅读 · 0 评论 -
P2824 【[HEOI2016/TJOI2016]排序】【线段树分裂】+【珂朵莉树】详解
戳这里,离线做法给定一个长度为NNN的数组,对MMM个区间 l∼rl \sim rl∼r 进行排序求最后 ppp 位置的值排序分(正序和倒序两种)分析上面给的链接有离线的做法,算是一个比较套路的做法,用线段树维护010101序列可以在 lognlognlogn 的时间内实现排序,所以通过二分最终答案可以得到值但是这题强制要求在线呢?这样的话,我们需要使用数据结构维护这些数的状态如何维护信息我们思考这样一个过程:初始我们有NNN个区间,都是有序的(每个数自成一个区间)一旦将区间l∼rl原创 2021-08-24 19:56:28 · 379 阅读 · 2 评论 -
P5494 【模板】线段树分裂
给出一个可重集 aaa(编号为 1),它支持以下操作:0 p x y:将可重集 ppp 中大于等于 xxx 且小于等于 yyy 的值放入一个新的可重集中(新可重集编号为从 222 开始的正整数,是上一次产生的新可重集的编号+1+1+1)。1 p t:将可重集 ttt 中的数放入可重集 ppp,且清空可重集 ttt(数据保证在此后的操作中不会出现可重集 ttt)。2 p x q:在 ppp 这个可重集中加入 xxx 个数字 qqq。3 p x y:查询可重集 ppp 中大于等于 xxx 且小于等于 .原创 2021-08-24 19:00:15 · 198 阅读 · 0 评论 -
P3332 [ZJOI2013]K大数查询【整体二分】或【树套树】
传送门给定一个长度为NNN的可重集合支持修改,离线求区间可重集合的并集第K大分析对于区间第K大,支持修改,自然会想到树套树经典的树套树,求动态区间第K大的时候用树状数维护版本信息,主席树(权值线段树)用来记录当前版本下的信息接下来求区间第KKK大,进行二分就行了这里由于是可重集,可以使用权值线段树维护可重集中数字的数量,作为内层嵌套外层要维护区间的可重集,使用线段树维护区间可重集...原创 2021-08-21 20:23:06 · 353 阅读 · 0 评论 -
P2617 Dynamic Rankings 动态区间第K大【树套树】或【整体二分】
传送门动态区间第KKK大问题,单点修改(这里是第kkk小,即是从小到大第kkk个)这里还有个区间修改,有点类似的 P3332 [ZJOI2013]K大数查询分析树套树树套树,就是用一种树形结构维护另一个数据结构形式多样,根据需求定制这里是,动态区间第KKK大考虑静态的情况下,解法有在线:主席树,划分树离线:整体二分如果要支持修改,划分树是根据最终结果排序后再构造出来的树,所以不资瓷修改剩下的,主席树和整体二分了,整体二分下面再说主席树静态区间,每一个版本的值域情况对每一个位置原创 2021-08-21 20:02:23 · 777 阅读 · 0 评论 -
CF-558-E. A Simple Task【线段树区间set】
传送门给定一个长度为NNN字符串,均为小写字母对区间进行MMM次排序,从小到大或者从大到小求,最后的字符串长什么样分析这里发现,小写字母只有26个,对于每次排序操作,就让这些字符单独排序,正序就先排a,在a排完的位置后排b,以此类推那么,就构建26棵线段树,维护当前树表示字母出现的位置对于排序来说,对某个区间字母进行排序,为区间setsetset,要知道有多少个字母进行排序,又是区间queryqueryquery,所以线段树支持这两个功能足以,为了保证复杂度,懒惰标记是要有的代码//CF5原创 2021-08-21 17:29:41 · 186 阅读 · 0 评论 -
SP3267 DQUERY - D-query【莫队】或【主席树】
传送门给定一个长度为NNN的数组,求区间 l∼rl \sim rl∼r 不同的数字分析对于此类后面出现会影响(覆盖)前面出现效果的问题需要往当前位置左边最后一次出现位置思考比如,mexmexmex 也是如此这道题求 区间mex 也是同样处理这种位置会覆盖前一个位置影响的,都考虑左边最近一个的位置静态区间在线查询 MEXMEXMEX主席树,维护最近值域出现的位置在 rrr 树上二分找值域的出现位置小于 lll 的最小值证明:假如一个数xxx 在区间 l∼rl \sim rl∼r 出现原创 2021-08-21 16:01:17 · 108 阅读 · 0 评论 -
P4137 Rmq Problem / mex【权值线段树】【莫队】
传送门给定长度为NNN的数组,求l∼rl \sim rl∼r 的mexmexmex(从0开始第一个没有在区间出现的数)分析这种位置会覆盖前一个位置影响的,都考虑左边最近一个的位置静态区间在线查询 MEXMEXMEX主席树,维护最近值域出现的位置在 rrr 树上二分找值域的出现位置小于 lll 的最小值证明:假如一个数xxx 在区间 l∼rl \sim rl∼r 出现过,那么它在rrr数上对应值域的值,一定是大于等于lll的推得,一个数在l∼rl \sim rl∼r区间出现过的条件是,在rr原创 2021-08-21 16:00:51 · 240 阅读 · 0 评论 -
2019 icpc西安邀请赛 E. Tree【树链剖分+区间异或和】
2019 icpc西安邀请赛 E. Tree【树链剖分+区间异或和】求树上简单路径的异或和【树链剖分】+【线段树】支持,修改链上的值为 a i ∣ t a_i|t ai∣t 以及 a i & t a_i\&t ai&t对位考虑,每一位建立一颗线段树,维护链上值的位情况原创 2021-08-14 16:56:45 · 172 阅读 · 0 评论 -
CF484-E. Sign on Fence 【整体二分】
传送门代码考虑单次二分最后二分过程中,某些重复操作可以通过单调性跳过,维护整体二分时的单调性代码里面带过去的值,因为不是中途修改的值,所以可以分开维护,这里注意一下原创 2021-08-14 16:07:11 · 157 阅读 · 0 评论 -
BZOJ.4552. [Tjoi2016&Heoi2016]排序【离线二分+线段树】
传送门给定长度为NNN的序列,再给出MMM次排序操作,[l,r][l,r][l,r]区间排序,递增或者递减两种,最后要求排序后PPP位置的数是什么分析由于是不强制在线,我们考虑离线做法对于一个数来说,它要么大于某个数XXX,要么小于等于XXX对于这种两面性,我们可以二分答案,把这个数抽象为111(小于等于),000(大于),对01序列进行排序。01序列可以通过线段树高效维护排序。区间set,区间求和就能解决// /* @Author: YooQ*/#include <bits/原创 2021-08-14 11:01:49 · 143 阅读 · 0 评论 -
BZOJ.3551. [ONTAK2010]Peaks加强版
Kruskal重构树 强制在线,主要就考一个【重构树】以及【树链剖分】+【线段树区间第K大】,离散化建立一颗权值线段树即可重构树的性质,某点往根节点跳,找到能够其值等于<=限制值的最远的节点,此节点的所有子树的叶子节点均可在不超过该节点权值的情况下相互到达。也就是题中的连通块。通过树链剖分和主席树将这些叶子节点的区间信息维护起来找第K大(为什么能维护呢?子树在树剖过后是连续的区间)原创 2021-08-14 01:44:54 · 145 阅读 · 0 评论 -
P3224 [HNOI2012]永无乡【并查集、线段树合并】
传送门在线维护连通块里面权值的第KKK大分析维护集合第K大,由于每个点的权值都是不同的,且值域范围111~NNN,考虑使用动态开点权值线段树维护。剩下的就是,如何在线维护加入一个集合到一个集合里面的数据,线段树合并能够在此条件下有良好的复杂度,实现将一个集合里面的桶合并到另一个集合里面(权值线段树就是一个桶线段树)。注意,在并查集维护点联通的时候,线段树合并也要朝着并查集合并的防线进行合并。比如有操作father[y]=xfather[y] = xfather[y]=x 此时 root[x]=m原创 2021-08-09 11:42:33 · 170 阅读 · 0 评论 -
P2894 [USACO08FEB]Hotel G
传送门一个NNN的数组支持两种操作查询111 ~ NNN 长度最少为 xxx 连续的 111将区间 [l,r][l,r][l,r] 的值置为 x,x∈{0,1}x,x \in \{0,1\}x,x∈{0,1}分析这道题和【Tunnel Warfare】有点相关同样是线段树维护这里有点像,区间连续最大值了。对于每个位置,维护三个信息{k,l,r}\{k, l, r\}{k,l,r}kkk 为区间连续的111长度lll 为区间左端点向右走,有多少连续的111,也就是连续最后一个111原创 2021-08-08 15:35:09 · 182 阅读 · 0 评论 -
Tunnel Warfare
传送门NNN的数组,初始为111支持三种操作将下标为xxx 的值变为 000求与下标 xxx 相连的连续的 111 的长度恢复上一次改为 000 的操作分析线段树维护值01序列这道题和【Hotel】有点相关此题要维护x左边相连最远多少 + 右边最远多少那么我们就维护左端点和右端点最远的距离!设 lll 为区间左端点,能预见的最远到右边连续第一个000的位置设 rrr为区间右端点,能预见的最远到左边连续第一个000的位置(连续最后一个111不就是前一个嘛)假设原创 2021-08-08 15:08:40 · 127 阅读 · 0 评论 -
P1600 [NOIP2016 提高组] 天天爱跑步
传送门无根树,NNN个节点给出 MMM 条链的起点 sss 和 ttt,起点 sss 从000秒开始往 ttt 走,每秒走一个节点,每个节点有一个查看时间wiw_iwi,只有在当前查看时间看到某个刚好走到当前节点 ppp ,此时就算sss造成一点贡献求每个节点能够看到多少个分析这题和之前一道【雨天的尾巴】很像,都是对链进行某种类型的操作,然后统计这种类型的贡献思路 【树上差分】+【线段树合并】路径一般对 两个端点和lcalcalca 进行操作,这里由于有时间的限制,速度一定,就原创 2021-08-08 14:34:26 · 141 阅读 · 0 评论