差分数组

1、差分数组的定义及用途
1.定义:
对于已知有n个元素的数列d,创建记录它每项与前一项差值的差分数组f:显然,f[1]=d[1]-0=d[1];对于整数i∈[2,n],咱们让f[i]=d[i]-d[i-1]。html

2.简单性质:
(1)计算数列各项的值:观察d[2]=f[1]+f[2]=d[1]+d[2]-d[1]=d[2]可知,d[i]=f[i]的前缀和。
(2)计算数列每一项的前缀和:第i项的前缀和即为数列前i项的和,那么推导可知数组

便可用差分数组求出数列前缀和;htm

3.用途:
(1)快速处理区间加减操做:
对数列区间[L,R]中的每一个数加上x,咱们经过性质(1)知道,第一个受影响的差分数组中的元素为f[L],即令f[L]+=x,那么后面数列元素在计算过程当中都会加上x;blog

最后一个受影响的差分数组中的元素为f[R],因此令f[R+1]-=x,便可保证不会影响到R之后数列元素的计算。get

这样咱们没必要对区间内每个数进行处理,只需处理两个差分后的数便可;博客

(2)询问区间和问题:
由性质(2)咱们能够计算出数列各项的前缀和数组sum各项的值;那么显然,区间[L,R]的和即为ans=sum[R]-sum[L-1];im

 

参考博客:http://www.javashuo.com/article/p-uyaywfoi-hw.htmldb

相关文章
相关标签/搜索