https://www.acwing.com/file_system/file/content/whole/index/content/6505356/
详细说明线段树
1.pushup
2.build, 将一段区间初始化成线段树
3.moidfy(
⚪1.单点修改(利用二分的思想)
⚪2.区间修改:pushdown(懒标记)
)
4.query
{
关于这个,我一直想不明白的点是,我们递归向下找区间的时候,为什么查找的区间还是l - r,(我想的是向下找不应该是l-mid,mid+1-r),其实是我把这个query原理想错了。
原理:不断向下递归,直到找到这个区间使得我们找到的这个子区间完全的包含在l-r当中,这样我们就可以用tr[u].v来返回这个区间的最大值,最后在不断的递归比较,就找到了整个l-r的区间的最大值。
}
5.pushdown
线段树除了最后一层,是一个满二叉树
编号是x
{
父节点 x / 2== x >> 1
左儿子 2x == x << 1
右儿子 2x+1 == x << 1 | 1
}
线段树开空间一般是4 * n