定义
对于已知有n
个元素的数列d
,建立记录它每项与前一项差值的差分数组f
:显然,f[1]=d[1]-0=d[1]
;对于整数i∈[2,n]
,我们让f[i]=d[i]-d[i-1]
。
性质
计算数列各项的值。
例如,
d[2] = f[1] + f[2] = d[1] + d[2] - d[1] = d[2]
,即数列第i
项的值可以由差分数组的前i
项的和计算。
计算前缀和。
第
i
项的值可以由差分数组的前i
项计算。那么数列的前缀和即可以表示为:
用途
处理区间内的加减操作
对于数列中区间[l,r]
内的数字加上x
,那么对于差分数组而言,f[l] += x
,f[r+1] -= x
,其余均不变。
例如,数列为2, 1, 1, 1, 8
,则其对应的差分数组为2, -1, 0, 0, 7
,当区间[2, 4]内的元素增加x时,数列变为2, 1+x, 1 + x, 1 + x, 8
,而差分数组变为2, x - 1, 0, 0, 7 - x
。
区间和
由前缀和的性质可以得到前缀和数组sum
,那么区间[l, r]内的元素和即为sun[r] - sum[l - 1]
。
参考博客
https://www.cnblogs.com/COLIN-LIGHTNING/p/8436624.html