差分
差分
在这之前了解过前缀和,比如a,b两个数组,b是a的前缀和,那么有:
b[0] = a[0]
b[1] = a[1] + a[0]= b[0] + a[1]
b[2] = a[2] + a[1] + a[0]=b[1]+a[2]
…………
同样的,也可以通过递推关系式来计算b数组
b[i] = b[i - 1] + a[i]
不妨设a[0] = 0,i > 0,那么显然有
a[i] = b[i] - b[i - 1]
我们就称a是b的差分数组。所以差分数组可以看成是前缀和数组的逆运算。
根据公式我们可以看出差分数组描述的是b数组相邻元素之间的差值。
那么利用这个数组我们可以干什么呢?
假如说对于数组b,我在区间[l,r]的每一个元素都加上一个常数c,那么对于数组b来说,我需要修改r - l + 1个数,而对于数组a来说,只需要修改两个位置就行:对于l位置,b[l] += c, 对于r+1位置,b[r+1] -= c,至于剩下的都不需要修改,因为所有相邻元素的差值,只有以上两个位置发生了改变。

浙公网安备 33010602011771号