Skip to content

模型Model

线段树

Segment tree

把区间递归分解为规范节点,并在每个节点保存幺半群聚合值的平衡树结构。

形式陈述 ​

给长度 n≥1 的数组 a1,…,an 与幺半群 (M,∘,e)。本页使用一基闭区间:根负责 [1,n],节点 [l,r] 在 l<r 时分成 [l,m] 与 [m+1,r],其中 m=⌊(l+r)/2⌋。叶保存单个值,父节点按左摘要 ∘ 右摘要合并。

查询 [ql,qr] 时,不相交节点返回 e,完全覆盖节点返回已有摘要,部分相交则递归两侧并按左到右的次序合并。点赋值只改变一个叶,再自底向上重算祖先。空数组单独保存空结构,不接受点赋值或非空区间查询。

摘要、复制和合并为常数成本时,建树需要 O(n) 时间与空间,点更新和区间查询为 O(log⁡(n+1))。查询的对数界来自两条边界路径:每层至多两个节点与查询部分相交,其余被访问节点已完整包含或排除,因而只产生 O(log⁡(n+1)) 个规范块。若摘要是变长对象,应把每次合并与输出成本另外计入。

直觉

线段树把索引区间递归二分,每个节点预存其规范区间的聚合摘要。任意查询区间可分解为 O(log⁡n) 个互不重叠的规范节点并快速重组,点更新则只影响一条根路径;结合律保证不同分解方式得到同一结果。它不是按数值“线段”排序,而是维护离散索引区间的树形覆盖。

线段树示意图
例子与边界

Fenwick 树用二进制低位分解维护前缀可逆聚合,空间和常数更小,但难以表达任意可合并懒标记;稀疏表面向完全静态的幂等查询,预处理后可常数回答 RMQ,却不支持在线更新。线段树以更大常数换取通用区间分解和更新能力。

区间和、最小值、最大子段信息都可通过设计合并规则维护。合并必须结合;非交换运算还必须保持左右顺序。普通线段树不自动支持任意区间更新。

数组 [2,1,4,3] 的根保存总和 10,左右子分别保存 3,7。查询闭区间 [2,4],组合下标2的叶值1与节点 [3,4] 的和7,得到8;把位置3改为5后,叶、右半区间与根的摘要依次变为5、8、11。

要实现返回最左最小位置的零基半开 RMQ 接口,须另选保存下标的摘要:本页第 j 个叶保存 (aj,j),两份非空摘要按字典序取最小值,键并列时保留较小下标。再加入一个表示空摘要的独立标记 e,规定 e∘z=z∘e=z;它在最小值选择中让位于每个真实数对,无需假设键集合含数值 +∞。查询 [l,r) 对应本页的闭区间 [l+1,r],取返回数对的下标分量再减一。

静态区间和可用前缀相减回答,线段树则保留点更新后继续查询的能力。懒惰区间更新还要求更新标签能复合,并且标签作用与节点摘要、区间长度之间有可在 O(1) 时间维护的兼容规则;“给区间做任意修改”不满足这一条件。大范围稀疏坐标可用动态开点或坐标压缩。

推论与应用

数组提供叶序,二叉树提供区间分解,幺半群提供结合聚合;懒惰传播在满足上述标签条件时增加区间更新。在线 RAM 中,标准静态布局占 O(n) 空间,构建 O(n),查询与合法更新为最坏 O(log⁡n)。

线段树的节点摘要也是树增强思想,但索引骨架固定,不是按键旋转的搜索树。重链分解把树路径拆成若干数组区间后调用线段树;持久化数据结构则通过路径复制保留历史根。

平方根分解采用一层连续块而非递归区间树。保存每块排序表后,可以在线处理点赋值和区间阈值计数,但一次赋值要移动块内数组项,查询还要为每个整块付二分成本;不能把本页常数摘要的对数界直接搬过去。

树套树可在每个外层节点再维护一套内层索引,服务二维正交查询,但空间和更新代价必须把两层同时计入。线段树分治处理的是另一条轴:它把对象的有效时间段分配给时间树上的规范节点,DFS 进入、退出节点时配合可回滚结构回答离线动态问题。

区间树存储的是一组几何区间并回答 stabbing/intersection 查询,不能与“把数组区间递归分解”的本页结构同名互换。

Li Chao 树也递归二分查询坐标,但每个结点保存一条参与下包络竞争的线。插入时保留中点胜者,把另一条线送到单侧;查询比较根叶路径上的线值。这套正确性来自两条线至多交一次,不是把子区间摘要用结合运算合并。

参考资料
  • OI-Wiki contributors, OI-Wiki (2026), segment tree.
  • cp-algorithms contributors, Algorithms for Competitive Programming (2026), segment tree.
  • Jon Louis Bentley, “Solutions to Klee’s Rectangle Problems,” Carnegie Mellon University technical report, 1977.
关系图谱18 个相邻概念 · 4 类关系

拖动节点调整位置。

显示关系

显示:依赖

  1. 前置三跳
  2. 前置二跳
  3. 前置一跳
  4. 当前条目
  5. 后续一跳
  6. 后续二跳
  7. 后续三跳
文字版关系按与当前条目的最短距离分组
类型化关系