Skip to content

差分数组

Difference array

用相邻值之差表示序列,使区间加法转化为两个端点更新。

条目类型
模型

形式陈述

对序列 a1,,an,定义

d1=a1,di=aiai1 (i>1).

对区间 [l,r] 全部加 x,只需令 dl+=x,若 r<n 再令 dr+1=x。最终对 d 取前缀和即可恢复更新后的序列。

直觉

差分数组存储相邻前缀状态之间的增量,而不是每个位置的绝对值。区间统一加上 v 时,内部相邻元素同时增加,差值彼此抵消,只有左端加 v、右端后一位减 v 的边界变化留下;最后一次前缀累积恢复全部元素。这个技巧本质上是离散微分与离散积分的互逆。

差分端点更新与前缀恢复
例子与边界

原数组 [1,3,3,5] 的差分可写为 [1,2,0,2]。对区间 [2,3]4,修改 d2+=4d4=4,得到 [1,6,0,2];前缀恢复为 [1,7,7,5]

差分适合离线积累大量区间更新,并在线性时间统一恢复,却不能在每次更新后立即回答任意区间查询,除非再配合 Fenwick 树或线段树。普通差分要求更新是可组合、可逆的加法作用;在一般交换幺半群上只有前缀聚合而未必存在差分。

推论与应用

差分连接离散导数与前缀积分:前缀和是恢复操作,交换群提供加法逆元,数组提供可寻址的有界坐标域。它支撑扫描线事件和区间更新批处理;二维差分可把矩形更新化为四个角点修改,在线场景则通过两个Fenwick 树实现区间加与前缀/区间和。前缀恢复也可用并行 scan 或按块顺序读取,但工作、深度和 I/O 必须在各自模型中另计。

差分数组并不是一般数据流摘要:它需要为每个端点保留可寻址槽位,并在最后完整扫描。数据流分位数面对可能巨大或未知的值域,只用受限空间近似秩查询,通常显式带误差与失败概率;两者都“顺序处理更新”,却在存储假设、输出语义和保证类型上完全不同。

参考资料
  • OI-Wiki contributors, OI-Wiki (2026), difference arrays.
  • cp-algorithms contributors, Algorithms for Competitive Programming (2026), prefix sums and difference techniques.
  • Donald E. Knuth, The Art of Computer Programming, Vol. 1: Fundamental Algorithms, 3rd ed., Addison-Wesley, 1997, cumulative sums and finite differences.
关系图谱8 个相邻概念 · 2 类关系

拖动节点调整位置。

显示关系

显示:依赖

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

限定层次等价