
线段树
文章平均质量分 52
宇智波一打七~
不要忘记自己曾经向往的地方!
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
【AcWing 1277. 维护序列】线段树双懒标记
题目链接题意:老师交给小可可一个维护数列的任务,现在小可可希望你来帮他完成。有长为 N 的数列,不妨设为 a1,a2,…,aN。有如下三种操作形式:把数列中的一段数全部乘一个值;把数列中的一段数全部加一个值;询问数列中的一段数的和,由于答案可能很大,你只需输出这个数模 P 的值。分析:首先想到的就是用两个懒标记做了,一个懒标记对应加法懒标记,一个对应乘法懒标记,然后一开始做的时候是直接进行的最基础的线段树区间更新和区间查询,但是就出现了问题,后来听了y老师的讲解,明白了,假如这个序列的乘法原创 2022-03-13 20:43:26 · 289 阅读 · 0 评论 -
【AcWing 1275. 最大数】线段树动态加点
题目链接题意:给定一个正整数数列 a1,a2,…,an,每一个数都在 0∼p−1 之间。可以对这列数进行两种操作:添加操作:向序列后添加一个数,序列长度变成 n+1;询问操作:询问这个序列中最后 L 个数中最大的数是多少。程序运行的最开始,整数序列为空。一共要对整数序列进行 m 次操作。写一个程序,读入操作的序列,并输出询问操作的答案。分析:在线段树后面添加一个数其实在线段树节点足够多的情况修下只是在第n+1个点加上了一个数而已,下面请看代码吧(ps:这个题需要开long long)#原创 2022-03-13 17:29:34 · 337 阅读 · 0 评论 -
【AcWing 247. 亚特兰蒂斯】线段树扫描线
题目链接题意:给你n个矩形,问这些矩形所覆盖的面积是多少,如下图就是两个矩形覆盖的总面积。分析:这个题我一开始想的时候直接没往线段树上想,因为这个是double类型的,线段树在我的认知看来都是int类型的,而且这个东西是二维的面积,怎么会和线段树有关呢qaq,但是这个题就是用线段树扫描线做出来的,具体是怎么扫描的呢,下面来看个图片。假如蓝色的部分是题目中给出的矩形,红色的线是对于每个x坐标画出的线,那么对于每段区间(x[i],x[i+1]),只需要找出矩形的高度即可,如x1~x2,就是两个绿色原创 2022-03-12 21:57:44 · 392 阅读 · 0 评论 -
【AcWing 246. 区间最大公约数】线段树维护区间最大公约数+数学知识+差分
题目链接题意:给定一个长度为 N 的数列 A,以及 M 条指令,每条指令可能是以下两种之一:C l r d,表示把 A[l],A[l+1],…,A[r] 都加上 d。Q l r,表示询问 A[l],A[l+1],…,A[r] 的最大公约数(GCD)。对于每个询问,输出一个整数表示答案。分析:一看到区间加法就会想到线段树lazy标记,但是这个lazy标记对sum是有用的,对gcd可就没有用了,假如说一段区间的最大公约数是x,那么给这段区间所有的数都加上1,那么这个区间的最大公约数还是x吗?那显然原创 2022-03-12 15:18:25 · 315 阅读 · 2 评论 -
【AcWing 245. 你能回答这些问题吗】线段树区间合并
题目链接题意:给定长度为 N 的数列 A,以及 M 条指令,每条指令可能是以下两种之一:1 x y,查询区间 [x,y] 中的最大连续子段和,即 maxx≤l≤r≤y{∑i=lrA[i]}。2 x y,把 A[x] 改成 y。对于每个查询指令,输出一个整数表示答案。分析:对于操作2,是很简单的线段树单点修改,但是对于操作1的话就有点复杂了,比如说要求一个区间内的最大子段和,并不能直接将它的两个子区间的最大子段和加起来,因为他们可能会不连续 ,至于为什么的话请看下面这张图:看一下这个图把,2原创 2022-03-05 19:04:59 · 165 阅读 · 0 评论 -
线段树模板
1.区间加减int a[N];struct node{ int l,r,sum,lazy;};node tr[N<<2];void pushup(int k){ tr[k].sum = tr[k<<1].sum+tr[k<<1|1].sum;}void build(int k,int l,int r){ tr[k] = {l,r,0,0}; if(l == r){ tr[k].sum = a[l]; return; } int mid =原创 2021-08-16 20:53:32 · 134 阅读 · 0 评论