线段树
文章平均质量分 73
forever_shi
但行好事,莫问前程;行你所行,无问西东!
展开
-
洛谷3238 HNOI2014 道路阻塞 最短路 线段树(无代码)
HNOI2014 道路阻塞原创 2022-07-09 21:07:06 · 260 阅读 · 0 评论 -
洛谷4198 楼房重建 线段树
题目链接题意:你有nnn个位置可以建楼,位置编号为111到nnn,一开始所有位置都没有楼。每个位置的楼都可以看作一条垂直x轴的线段,我们从原点观察,当一栋楼上有一个点与原点连线上没有和其他楼的交点(交点是线段端点也不行)。有mmm次操作,每次可以让一个位置的楼高度发生变化,可能高了也可能矮了。问你每次操作后从原点能看到多少栋楼。n,m<=1e5n,m<=1e5n,m<=1e5题解:可以发现一栋楼能被看到只要楼顶的那个端点能被看到即可。这是一个比较显然的事情,也比较符合生活。那么这个原创 2021-08-24 16:31:20 · 256 阅读 · 0 评论 -
洛谷4097 HEOI2013 Segment 李超树
题目链接题意:有nnn次操作,每次操作可能有两种,第一种是插入一条线段,告诉你线段的两个端点,其中1<=x<=399901<=x<=399901<=x<=39990,1<=y<=1e91<=y<=1e91<=y<=1e9,保证端点都是整数。第二种操作是询问与x=kx=kx=k这条直线相交的所有线段的kkk这个横坐标下的纵坐标的最大值。强制在线。n<=1e5n<=1e5n<=1e5。如果有多个线段,输出编号最小的。题原创 2021-08-19 17:35:49 · 148 阅读 · 0 评论 -
李超线段树学习笔记
前言:其实我很早就听说过李超树了,之前也有好多次想学这个东西,但是都因为各种原因没有学习。现在终于抽出了点时间学习了这个数据结构。进入正题。首先是李超树能解决什么问题。可以理解为,现在有一个二维坐标系,横坐标是正整数。李超树可以解决给一个区间加入一条斜率不一定是0的线段,询问一个所有覆盖这个横坐标的线段的最大或最小值。或者在一个横坐标区间中的所有线段的最大或最小值(可能只有部分在区间内)。下面介绍一下怎么维护。这里顺带了一个正确性证明。我看网上似乎很少有人证明李超树的正确性。我自己想了一下,觉得不是原创 2021-08-19 17:28:51 · 300 阅读 · 0 评论 -
洛谷3722 AH2017/HNOI2017 影魔 线段树 单调栈
题目链接题意:你有一个长度为nnn的排列,对于一对下标i,j(i<j)i,j(i<j)i,j(i<j),如果它们之间没有比aia_iai和aja_jaj大的数字,那么贡献为p1p_1p1,如果存在一个位置kkk,满足ai<ak<aja_i<a_k<a_jai<ak<aj或aj<ak<aia_j<a_k<a_iaj<ak<ai,则贡献为p2p_2p2,其他情况没有贡献。有mmm次询问,每次询问给你原创 2021-08-12 20:34:09 · 150 阅读 · 0 评论 -
CF1428F Fruit Sequences 线段树
题目链接题意:给一个长度为nnn的010101串,问你对于所有区间[l,r][l,r][l,r],区间中最长连续111的长度之和。n<=5e5n<=5e5n<=5e5题解:先来吐槽两句。这题当场和舍友一起打的,但是他们去写题了,我只是在边上看题口胡。结果这题我和舍友一起口胡了一个假做法之后就没管。结果寒假训练时阴差阳错又有人搬了这个题,结果一写发现之前做法假了,然后自己又连想好几个假做法。感觉这种可能可行的打开方式比较多的题还是经常找不准打开方式QAQ回归正题,说做法。打开方式是原创 2021-01-25 14:50:59 · 147 阅读 · 1 评论 -
CF1422 F Boring Queries 主席树 线段树 数论 (无代码)
题目链接一些说明:现在是ACM选手了,但是由于大学里也真的很忙,所以可能有些题没时间写代码了,但是思想又不错,我就写一下思路,做个笔记。可能寒暑假有机会再补代码吧题意:给你一个长度为nnn的序列,每个数字是满足1<=ai<=2e51<=a_i<=2e51<=ai<=2e5的正整数,有qqq次询问,每次问你一个区间[l,r][l,r][l,r]的LCMLCMLCM是多少,模1e9+71e9+71e9+7,强制在线。n,q<=1e5n,q<=1e5n,q原创 2020-10-23 21:20:36 · 195 阅读 · 0 评论 -
BZOJ4777 七彩树 线段树合并
题目链接题意:给你一个nnn个点的树,每个点有一个范围是1−n1-n1−n的权值,可能会有重复。每次问你一个点的子树内与它深度差不超过xxx的所有点(包括本身)中出现了多少种不同的权值。强制在线。题解:感觉一看就很线段树合并,因为如果没有不同权值的限制,只问一个点子树内与它深度差不超过xxx的点的个数,就是一个经典的线段树合并的题了。但是现在的问题是他问的是不同的权值个数,这个权值应该怎...原创 2019-03-07 19:47:06 · 204 阅读 · 0 评论 -
洛谷4309 BZOJ3173 TJOI2013 最长上升子序列 平衡树 dp 线段树
题目链接题意:你有nnn个数,每个数会插到一个位置,告诉你每个插到数列后的位置,问你每一个数插完之后的最长上升子序列长度。n<=1e5n<=1e5n<=1e5。题解:带插入的最长上升子序列,由于不是强制在线,于是我搞了个离线做法。我的做法是先用一个平衡树来维护出插入后序列每个位置的数值,然后用一个nlogn的dp来算每个数插入后以某个这个位置的数为结尾的...原创 2019-03-19 21:55:20 · 161 阅读 · 0 评论 -
CF915E Physical Education Lessons 动态开点线段树
题目链接题意:你有nnn个位置,一开始全是1。有qqq次操作,每次操作把一个区间的数全变成000或全变成111,问每次操作后区间111的个数。n<=1e9,q<=3e5n<=1e9,q<=3e5n<=1e9,q<=3e5。题解:一看就是一个动态开点线段树裸题吧。就是复习一下写法。我的写法是维护0的个数,用nnn减去000...原创 2019-03-22 09:30:21 · 107 阅读 · 0 评论 -
CF762E Radio stations 动态开点线段树
题目链接题意:一共有nnn个电台,对于每个电台iii有三个参数:xi,ri,fix_i,r_i,f_ixi,ri,fi ,分别指它的一维坐标、作用半径和频率。如果两个电台的频率差值在kkk内,并且它们的作用范围都能覆盖到彼此,那么就称这两个电台相互干扰。kkk是一开始给定的。问这nnn个站台中相互干扰的站台有多少对。n<=1e5,k<=10,xi,ri&...原创 2019-03-22 15:04:27 · 257 阅读 · 0 评论 -
洛谷4556 BZOJ3307 [Vani有约会]雨天的尾巴 线段树合并 差分 LCA
题目链接题意:首先村落里的一共有nnn座房屋,并形成一个树状结构。然后救济粮分mmm次发放,每次选择两个房屋(x,y)(x,y)(x,y),然后对于xxx到yyy的路径上(含xxx和yyy)每座房子里发放一袋z类型的救济粮。然后问当所有的救济粮发放完毕后,每座房子里存放的最多的是哪种救济粮。如果有多种数量相同的输出编号最小的。n,m,z<=1e5n,m,z<=1e5...原创 2019-03-23 14:09:56 · 307 阅读 · 0 评论 -
洛谷2048 BZOJ2006 NOI2010 超级钢琴 线段树 堆 贪心
题目链接题意:给你一个长度为nnn的序列,一个区间的权值是区间内的权值和,你要选择kkk个不相同长度在[l,r][l,r][l,r]的区间,使得这kkk个区间总权值和最大。n,k<=5e5n,k<=5e5n,k<=5e5。题解:算是送我退役的题吧。如果一轮省选之前我做了这个题,可能结果就会不一样了吧,可惜没有如果。显然是找长度在[l,r][l,r][l,...原创 2019-04-09 08:58:33 · 330 阅读 · 0 评论 -
BZOJ2905 背单词 AC自动机 线段树
题目链接由于是权限题,我没有权限号,就挂了一个darkbzoj的链接。题意:给你nnn个字符串,每个串有一个价值,你要从中选出一个价值和最大的子序列,使得前面的串是后面串的子串。数据组数&lt;=10,总串长&lt;=3e5,单个串长&lt;=2e4数据组数&lt;=10,总串长&lt;=3e5,单个串长&lt;=2e4数据组数<=10,...原创 2019-02-19 16:53:25 · 335 阅读 · 0 评论 -
洛谷4197 BZOJ3545 BZOJ3551 peaks Kruskal重构树 主席树 线段树合并
题面链接题意:给你一个n个点m条边的无向图,边有边权,点有点权。有q次询问,每次问你从x出发,只能经过边权不超过y的边,能到达的所有点中点权第k大的权值是多少,如果不存在就输出-1。n<=1e5,m,q<=5e5BZOJ3551和另外两个题号的题面的区别是多了一个强制在线。题解:先吐槽两句。写这个题真的是心态崩了。这个题本来并不怎么难,但是我却一直RE,过了对拍也没有用。在洛...原创 2019-02-03 14:28:11 · 277 阅读 · 0 评论 -
洛谷3521 BZOJ2212 POI2011 Tree Rotations 线段树合并学习笔记
题目链接题意:给你一棵每个非叶子节点都有两个叶子的二叉树,只有叶子上有值,你可以选择交换任意的一个点的左右子树,使得最后的树按照前序遍历之后所有叶子的值形成的数列的逆序对最少。叶子个数&lt;=200000此题树的读入方式比较奇怪,是先读入一个n,表示叶子的个数,再递归的读入,如果当前是个0,那么接下来会递归到左右子树,如果是有值的,那么就意味着当前这个点是叶子,它的值就是读入的值。题解:...原创 2019-01-15 20:30:15 · 191 阅读 · 0 评论 -
洛谷2572 bzoj1858 SCOI2010 序列操作 线段树
题目描述lxhgww最近收到了一个01序列,序列里面包含了n个数,这些数要么是0,要么是1,现在对于这个序列有五种变换操作和询问操作:0 a b 把[a, b]区间内的所有数全变成01 a b 把[a, b]区间内的所有数全变成12 a b 把[a,b]区间内的所有数全部取反,也就是说把所有的0变成1,把所有的1变成03 a b 询问[a, b]区间内总共有多少原创 2018-03-27 21:37:52 · 226 阅读 · 0 评论 -
洛谷1020 NOIP1999 导弹拦截 dp
题目描述某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统。但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能高于前一发的高度。某天,雷达捕捉到敌国的导弹来袭。由于该系统还在试用阶段,所以只有一套系统,因此有可能不能拦截所有的导弹。输入导弹依次飞来的高度(雷达给出的高度数据是不大于50000的正整数),计算这套系统最多能拦截多少导弹,如果原创 2018-05-07 13:03:09 · 325 阅读 · 0 评论 -
洛谷4140 BZOJ3813 奇数国 欧拉函数 线段树 状压
题目链接 题意: 求区间积的ϕϕ\phi值。题解: number∗x+product∗y=1number∗x+product∗y=1number*x+product*y=1可以转化为gcd(number,product)=1gcd(number,product)=1gcd(number,product)=1,即求ϕ(product)ϕ(product)\phi(product) 题目保...原创 2018-09-17 11:46:41 · 166 阅读 · 0 评论 -
洛谷P2824 BZOJ4552[HEOI2016/TJOI2016]排序 二分答案 线段树
题目链接题意:给你一个1-n的全排列,有m次操作,每次把一个区间[l,r]升序排序或者降序排序,最后有1次询问,求m次操作后某一个位置的权值。原创 2018-10-04 22:37:11 · 217 阅读 · 0 评论 -
洛谷3960 列队 NOIP2017 动态开点线段树/Splay
题目链接题意:你现在有一个n*m矩阵,有q次操作,每次询问(x,y)位置的编号,(x,y)的起始编号是(y-1)*m+x。每次操作输出该位置的编号,并且拿出该编号,该行后面的向前补,然后对于最后一列向上补,最后把这个编号放在第n行第m列的位置。(n,m,q<=3e5)题解:这题想要用树形数据结构维护,但是发现空间不够。于是线段树就要动态开点,splay的话要把一段连续的编号缩成一个点...原创 2018-09-27 20:35:21 · 388 阅读 · 0 评论 -
CF914D Bash and a Tough Math Puzzle 线段树 gcd
题目链接(洛谷)题意:给你一个序列a,两种操作,操作0是询问一个区间l,r,问是否最多修改一个数使得区间的gcd是x;操作1是单点修改。5e5题解:这种可以合并的题一看就是可以线段树维护的。对于操作0,我们用线段树维护区间gcd,如果区间gcd是x的倍数,那么把任意一个数改成x就可以了,要么就只有一个数不是x的倍数,把那个数改成x就可以了。其他情况都没法通过只改一个点得到。对于操作1,...原创 2018-10-08 13:32:03 · 121 阅读 · 0 评论 -
洛谷1712 BZOJ4653 NOI2016 区间 线段树 离散化
题目链接题意:在数轴上有NNN个闭区间[l1,r1],[l2,r2],...,[ln,rn][l_1,r_1],[l_2,r_2],...,[l_n,r_n][l1,r1],[l2,r2],...,[ln,rn]。现在要从中选出MMM个区间,使得这MMM个区间共同包含至少一个位置。换句话说,就是使得存在一个xxx,使得对于每一个被选中的区间[li,ri][l_i,r_i][li,...原创 2018-10-08 18:40:15 · 187 阅读 · 0 评论 -
BZOJ4476 JSOI2015 送礼物 分数规划+单调队列+线段树
题目链接题意:给定一个长度为nnn的序列和三个正整数k,L,Rk,L,Rk,L,R,要求找出一个长度在[L,R][L,R][L,R]之间的区间[i,j][i,j][i,j],最大化max{a[i...j]}−min{a[i...j]}j−i+k\frac{max\{a[i...j]\}-min\{a[i...j]\}}{j-i+k}j−i+kmax{a[i...j]}−min{a[i...j]...原创 2018-11-26 10:19:00 · 235 阅读 · 0 评论 -
BZOJ1396 识别子串 SAM 线段树
题目链接题意:给定一个字符串S,对于一个整数K,定义S的子串T=S(i, j)是关于第K位的识别子串,满足以下两个条件:1、i≤K≤j。2、子串T只在S中出现过一次。例如,S=“banana”,K=5,则关于第K位的识别子串有&quot;nana&quot;,“anan”,“anana”,“nan”,“banan&quot;和&quot;banana”。现在,给定S,求对于S的每一位,最短的识别子串长度是多少题解:原创 2018-12-06 11:51:04 · 182 阅读 · 0 评论 -
洛谷3605 [USACO17JAN]Promotion Counting晋升者计数 线段树合并 离散化
题目链接题意:给你一个n个点的树,每个点有一个点权,问你每个点的子树里有多少个点的权值比当前点的权值小。n<=100000题解:我搜出了是个线段树合并的题,知道该用什么算法之后还是比较好做的了。首先线段树肯定是要建动态开点的权值线段树,由于权值范围很大,所以肯定要先离散化一下。离散化之后,根据建出的树dfs一遍,从下向上合并。我的写法是,先把每个子树的线段树的信息都合并到当前点的...原创 2019-01-17 10:45:33 · 198 阅读 · 0 评论 -
洛谷3899 谈笑风生 线段树合并
题目链接题意:给你一棵n个点的树,边的边权都是1。有q次询问,每次询问给一个a一个x,表示询问满足下列条件的三元组的个数:(a,b,c),使得a和b都是c的祖先节点并且a与b的距离不超过x。n,q<=300000题解:乍一看确实不太好做,如果你没有想到正确的算法的话可能不好做。这个题的做法好像很多,我在这里只介绍一种用线段树合并做的在线做法。我们考虑告诉你了a之后,b和c会是怎么组...原创 2019-01-17 20:59:26 · 373 阅读 · 0 评论 -
BZOJ4919 大根堆 线段树合并 二分 离散化
题目链接题意:给你一棵树,每个点有点权,问你最多能选出多少个点,使得所有选出的点中子节点的权值都比父节点小(严格小于)。点数2e5,权值1e9题解:首先的一个暴力是用一个树形dp,dp[x][i]dp[x][i]dp[x][i]表示点xxx为根的子树内,最大权值是iii时子树内最多选的点数。我们不难发现,随着这个iii的增大,最多选出的点数也是单调不降的。于是我们考虑从子节点转移过来,dp...原创 2019-01-25 20:48:30 · 249 阅读 · 0 评论 -
最大数 洛谷1198 JSOI2008
题意:现在请求你维护一个数列,要求提供以下两种操作:1、 查询操作。语法:Q L功能:查询当前数列中末尾L个数中的最大的数,并输出这个数的值。限制:L不超过当前数列的长度。(L>=0)2、 插入操作。语法:A n功能:将n加上t,其中t是最近一次查询操作的答案(如果还未执行过查询操作,则t=0),并将所得结果对一个固定的常数D取模,将所得答案插入到数列的末尾。限制:n是整数(可能为负数)并且...原创 2017-12-29 21:05:08 · 184 阅读 · 0 评论