注:本文不用于传给他人阅读学习,仅个人记录
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
模板
需要完成的:
1.将某区间每一个数加上k
2.求某区间每一个数的和
代码主要构成:
一.区间加
挖空变成通用模板:
二.求去区间和
挖空:
线段树相关要点(易错点):
1.在函数中传入的L,R,l,r有很多。要将它们是代表目标区间还是目前遍历到的区间确定下来。
这里统一使用l,r作为目前所在的区间。(另外有可能在打代码的时候把L达成l)
2.空间最好开四倍
3.通常要离开long long 最好注意范围
线段树-懒标记的使用
例题:线段树二
线段树二相比一多了乘法。
所以需要两个懒标记数组(一个记录加法,一个记录乘法)
另外还需要注意的是:
线段树二的树懒标记和线段树一的树懒标记不一样。
不仅仅只是单纯地加了一个乘法。
还有顺序的区别。
线段树二需要:先乘再加。
线段树-扫描线(矩阵面积并)
扫描线是一种运用于二维平面上的技巧。
这道题就已经是线段树的一种变式了。
需要关注的点:
1.线段树的两个模板都是一种点线段树,而不是一种区间线段树。
区间线段树相比点线段树要考虑更多。
比如:是左闭右开还是左闭右闭。
建议写左闭右闭。
多做点别的
小白逛公园
先不写公园了,昨天新弄了一道模板变式题目。
https://xinyoudui.com/ac/contest/747011268000BED0905C9C/problem/8286
火车线路
1.减法懒标记
这边我使用懒标记的方式是:在lzy[i]上加值,在w[u]上减lzy[i]
这个加加减减的很容易弄混。需要注意
2.w[u]存储了什么数值?
或许是打模板打多了,我一开始的pushup写的是:w[u]=w[u*2]+w[u * 2+1]
但实际上,你要弄清楚树的节点维护的是什么。
在这道题目中,树的节点实际上维护的是:其左子节点和右子节点所维护的区间最小值取min。
3.修改范围
这道题目说:从起点站O到目标站D需要预定n个座位
看起来它想预定(O,D)的n个作为。实际上,目标站并不需要预定座位,所以应该是(O,D-1)