Skip to content

懒惰传播

Lazy propagation

把作用于整个节点区间的可组合更新暂存为标记,仅在必要时下传。

条目类型
原则

形式陈述

线段树节点摘要取值于集合 X,待处理更新标签构成幺半群 (T,,e),并通过幺半群作用

α:T×XX

作用于摘要。这里 t2t1 表示先执行 t1、再执行 t2;实现中的标签复合顺序必须与这一约定一致。

若一次更新完整覆盖节点区间 I,就把摘要改为 α(t,sI),并把节点标签复合为 tlazyI。访问子节点前,将父标签作用到两个孩子并清空父标签。正确性至少需要:

  1. 标签作用满足单位元与结合复合律;
  2. 节点摘要包含足够局部信息,使 α(t,sI) 可在 O(1) 时间计算;
  3. 同一标签对左右摘要合并兼容,通常写成α(t,xy)=α(t,x)α(t,y),或把区间长度等元数据纳入 x,y 后使该式成立;
  4. 查询、下传与标签复合始终遵守同一时间顺序。

在这些条件下,标准区间更新与区间查询各访问 O(logn) 个规范节点,最坏时间为 O(logn)

直觉

Lazy propagation 把“整段仍欠一次变换”记录在内部节点,而不立即逐叶执行。只要查询仍完整覆盖该节点,摘要已经足够回答;只有进入子区间时才兑现欠账。

关键不是多一个 lazy 数组,而是建立一套闭合代数:标签能复合,标签能直接更新整段摘要,且先后次序不会在父子层之间改变。任何一项缺失,延迟执行都可能与立即执行产生不同结果。

懒惰传播中的标签债务
例子与边界

区间加、区间和可令摘要为 (s,),标签为 v(R,+,0)

v(s,)=(s+v,).

两个加法标签直接相加,单位标签为 0。把长度放进摘要后,作用与左右合并兼容。

区间赋值标签可表示为 noneassign(c)。后来的赋值覆盖早先赋值,因此复合不交换。若同时支持赋值与加法,标签可规范化为仿射变换 xax+b 的受限子幺半群;复合时顺序写反会在混合操作上产生错误。

区间取模、依赖元素分布的条件更新或“把每个值替换为其排名”通常不能仅由常数大小摘要计算整段新值。Segment Tree Beats 等方法依赖更丰富不变量与摊还分析,不是普通 lazy tag 的直接实例。

推论与应用

函数复合是理解标签顺序的实现工具,幺半群作用则给出不依赖具体代码的正确性接口。搜索树增强只要求摘要可由孩子恢复;lazy propagation 还要求更新作用与摘要合并相容,是更强的维护契约。

持久化线段树中,下传会修改孩子,因此必须路径复制,不能污染旧版本。并行或无锁实现还需处理多个标签的同步顺序;代数可合成不代表并发写入自动线性化。

参考资料
  • Thomas H. Cormen et al., Introduction to Algorithms, 4th ed., MIT Press, 2022, augmented tree invariants.
  • AtCoder Library, “Lazy Segtree,” algebraic interface documentation, 2026.
  • OI-Wiki contributors, “Lazy Segment Tree,” 2026.
关系图谱10 个相邻概念 · 2 类关系

拖动节点调整位置。

显示关系

显示:依赖

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

使用的工具