algorithm-tree-segment-tree
线段树
概念
线段树是一种用于解决区间更新和区间查询问题的高效数据结构
- 这里我把区间更新分成两种(upd函数)
- 区间添加更新,给这个区间的子数组都添加上某个值
- 区间覆盖更新,把这个区间的子数组都赋值为某个值
- 而区间查询也大概分为两种(query函数)
- 区间和查询,求这个区间的数组的元素值之和
- 区间最大值查询,求这个区间的数组的元素值的最大值
单点更新可以用区间更新的模板,只要把左右两个坐标设置成一样的就可以了
但是单点更新可以用树状数组解决,优先用树状数组解决,更简单
数组无lazy线段树
模板:区间覆盖更新,区间和查询
- 307. 区域和检索 - 数组可修改:单点覆盖更新,区间和查询
1 | class SegmentTree { |
数组lazy线段树
模板:区间添加更新,区间和查询
1 | class SegmentTree { |
模板:区间添加更新,区间和查询(未验证)
1 | class SegmentTree { |
指针lazy线段树
对于有些题目值域过大,我们无法直接使用空间大小固定为 4×n 的常规线段树,就必须采用指针(动态开点)的方式了
模板:区间覆盖更新,区间和查询(未验证)
1 | class SegmentTree { |
模板:区间添加更新,区间和查询(未验证)
1 | class SegmentTree { |
- 3356. 零数组变换 II: 区间添加更新,区间最大值查询
- 715. Range 模块: 区间覆盖更新,区间和查询
- 2569. 更新数组后处理求和查询(2398):区间覆盖更新,区间和查询
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 BUGHERE の 博客!
评论