差分

差分

在这之前了解过前缀和,比如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,至于剩下的都不需要修改,因为所有相邻元素的差值,只有以上两个位置发生了改变。

posted @ 2021-05-07 21:56  kanbujian55  阅读(202)  评论(0)    收藏  举报