![](https://img-blog.csdnimg.cn/20190918140037908.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
数据结构------线段树
h
蒋卫升
这个作者很懒,什么都没留下…
展开
-
厦门大学程序设计大赛月赛 D(线段树:区间加&&区间乘)
linklinklink题意:给你一个数组,有5种操作,如下:操作 1: 格式:1 lll rrr kkk ;含义:将区间[l,r][l,r][l,r] 内每个英雄的攻击力加上kkk操作 2: 格式:2 lll rrr kkk ; 含义:将区间[l,r][l,r][l,r] 内每个英雄的攻击力乘上kkk操作 3: 格式:3 lll rrr kkk ;含义:将区间[l,r][l,r][l,r] 内每个英雄的攻击力置为kkk操作4:格式:4 xxx ;含义:在最后一个英雄后增加一个攻击力为xx原创 2020-05-20 16:54:36 · 153 阅读 · 1 评论 -
Loj 6278 数列分块入门 2 (分块解法 + 线段树解法)
题目链接题意:区间加 + 询问区间小于c*c的数的个数。————————————————————————分块思路:把数组分成根号n块,然后对每一块进行排序,对于不完整的块暴力更新,对于完整的块用lz数组保存更新的值,查询时,对于不完整的块直接暴力更新,对于完整的块二分查找。————————————————————————线段树思路:用mn数组保存区间最小值,用mx数组保存区间最大值,查...原创 2020-03-18 20:48:06 · 269 阅读 · 0 评论 -
D. Babaei and Birthday Cake (线段树 + dp)
题目链接题意:按顺序给你n个圆柱体的底面圆半径,和高,当且仅当后面的圆的体积大于前面的圆的体积,就可以把他们合并成一堆,求这n个圆柱体可以组成的最大圆柱体的体积。思路:首先,我们算出所有圆柱体的体积,设dp [ i ] = dp [ j ] + a[ i ],其中j < i && a[ j ] < a[ i ],并且dp[ j ]的值应该尽可能的大。那...原创 2020-02-02 09:26:16 · 320 阅读 · 1 评论 -
线段树题集
题目链接题意:给你一个数组a,ai <= 1e9,有q次查询,问ql到qr中能组成三角形吗,如果能输出最大的周长,否则输出-1。思路:因为形成三角形的条件是任意两边之和大于三边,也等价于最大的两边之和大于第三边,而斐波那契数列的性质刚好不能满足这个条件,斐波那契数列是成指数增长的,大约第46项就超过了1e9的范围,那么,我们就可以建主席树,枚举区间第k(k<=46)大,如果合...原创 2019-10-31 17:35:24 · 250 阅读 · 0 评论 -
动态区间第k小
题目链接题意:动态区间第k小就是静态区间第k小加上修改这个功能,静态第k小我们是用主席树做的,但是如果带上修改的功能,主席树保存的是前缀信息,所以说,当修改了一个点的时候,他后面的点都要修改,很明显时间复杂度过不去。所以就用树套树,树状数组套动态开点线段树,树状数组的时间复杂度是logn。这个题写了超久,要不是男神给我debug,估计还要两三天才能写出来。数组数组的上限是n,不是离散化后...原创 2019-10-24 09:05:25 · 760 阅读 · 1 评论 -
计蒜客 Yukino With Subinterval(树套树)
题意:给你一个数组,有两种查询:1 pos x就是把pos地方的值修改成x,2 l r x y,代表区间在l到r中,权值范围在x到y的区间的个数。这个区间要尽可能的长,且区间中的值都相等。思路代码原链接:原文链接最后一个样例,1到6中的合法区间是(1,2)、(3,3)、(4,4)、(6,6)。首先假设没有1操作,那么我们可以用主席树写,因为主席树保存了前缀信息,那么我们可以对每一...原创 2019-10-23 18:14:18 · 97 阅读 · 0 评论 -
中国女大学生程序设计竞赛 tree
题目链接树链刨分模板题#include<cstdio>#include<algorithm>#include<cstring>#include<cmath>#include<vector>using namespace std;#define ll long longconst int maxn=1e5+100...原创 2019-10-15 18:33:22 · 147 阅读 · 0 评论 -
codeforces 1044F DFS dfs序+线段树
题目链接题意:给你一棵树,然后有q次操作,每次操作在x,y节点连一条边,如果之前有边,就删除,但是不删除原来树的边,输出这颗树有多少个好节点,好节点的定义是,以这个节点为根节点,dfs这棵树,如果存在一种情况,dfs经过的边都是原来树的边,那么这个节点就是好节点。思路:先偷个图,嘻嘻。思路是,我们求出不好的点,答案就是总共的点减去不好的点,分为两种情况,情况1是y节点位于 x 节...原创 2019-10-15 00:31:51 · 227 阅读 · 0 评论 -
codeforces 1062E Company dfs序+线段树+lca
思路代码来自:ccsu_cat题目链接题意:给你一棵树,让你删除区间【l,r】中的某个节点,使得他们的lca的深度最大,输出删除的节点及lca的深度。思路:一段区间中对lca有影响的就是dfs序(深度优先搜素的顺序)最大的那个节点和dfs序最小的那个节点,那么假设输出最小的那个节点,那么此时的lca就是dfs序次小的与最大的的lca,假设删除最大的,那lca就是最小的和次大的,那么,...原创 2019-10-13 12:54:27 · 515 阅读 · 0 评论 -
计蒜客 QUERY(主席树)
题目链接思路及代码来自:ccsu_cat题意:给你一个序列,有q次询问,问区间 l 到 r 中间有多少对数,满足min(x,y)=gcd(x,y)。思路:我们对每个数建一棵可持续化权值线段树,保存这个数前面的因数及倍数的个数(包括它在内的合法答案的个数)。因为,主席树保存了区间的前缀信息,那么我们要查询的答案就是第r棵树的l到r的值减去第l-1颗线段树的值。#include&...原创 2019-10-13 00:02:07 · 100 阅读 · 0 评论 -
2018年湖南省赛主席树题
题意:给你一棵树,要你求出1号节点到其他节点的有序对的个数。思路代码来自:ccsu_cat思路:树上建可持续化权值线段树。ans是每个节点的答案,a是权值。对于一条链来说,如果前面没有出现过这个值,我的ans【i】=ans【i-1】+ i-1。如果出现一次,我就需要用一个d数组去保存a【i】出现的位置,此时我的ans【i】=ans【i-1】+i-d【a【i】】+1((a【i】,a【...原创 2019-10-12 13:39:19 · 139 阅读 · 0 评论 -
树链刨分+线段树区间更新
思路及代码:https://blog.csdn.net/ccsu_cat/article/details/90607753题目链接题意:给你一棵树,有三种操作,1操作,把节点u,到v的最短路路径上的节点or一个值,2操作,把节点u到v的最短路路径上的值&一个数,3操作,输出节点1到u的异或值;思路:这一题涉及节点与节点之间的关系,我们用树链剖分,把树分解一下加到线段树上去。这...原创 2019-10-10 16:44:13 · 131 阅读 · 0 评论 -
2019吉林省赛 线段树题
题目链接思路借鉴于:https://blog.csdn.net/ccsu_cat/article/details/100565077题意:给你一个包含n个元素的序列a,有两种查询,* 1 l r x 输出 l 到 r 中包含 数x 的合法子区间个数,所谓合法子区间指的是,包含这个数,并且这个数在子区间中出现了奇数次。* 2 d v 把a【d】的值...原创 2019-10-04 17:22:10 · 157 阅读 · 0 评论 -
区间合并线段树(小结)
题目链接题意:有n+1个城市,每两个城市有一条路连接,一共有n条路,每条路有一个权值,代表经过这条路要花的时间a【i】(2<=a【i】<=6 && a【i】属于整数),有q次查询,两种查询方式: * A,b,c:A代表第一种操作,请输出从城市b走到城市c一共要花多少时间,初始时间为0。 * C,b,c:C代表第二种操作,把经过 城市b...原创 2019-10-03 18:46:56 · 213 阅读 · 0 评论