Skip to content

线段树

Segment tree

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

条目类型
模型

形式陈述

给长度 n 的序列和结合运算 及单位元,线段树把区间递归二分。每个节点保存其区间的聚合值,父值由两个子值按顺序合并。 建树 O(n),单点更新沿一条深度 O(logn) 的根叶路径,区间查询分解为 O(logn) 个规范节点,空间 O(n)

直觉

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

线段树示意图
例子与边界

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

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

数组 [2,1,4,3] 的根保存总和 10,左右子分别保存 3,7。查询 [2,4] 可组合叶 2 与节点 [3,4]8;把位置 3 改为 5 后沿叶到根更新三个摘要。

区间和差可用前缀和静态回答,但线段树支持在线更新。聚合若不结合,节点合并次序会影响结果;非交换操作仍可使用,只要严格保留左右顺序。懒惰区间更新还要求更新标签能复合,并且标签作用与节点摘要、区间长度之间有可在 O(1) 时间维护的兼容规则;“给区间做任意修改”不满足这一条件。大范围稀疏坐标可用动态开点或坐标压缩。

推论与应用

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

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

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

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

参考资料
  • 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.
关系图谱12 个相邻概念 · 4 类关系

拖动节点调整位置。

显示关系

显示:依赖

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