前缀和
概述
给定数列A的前缀和构成的数列,很容易就能求出来.
S [ n ] = ∑ i = 1 n A [ i ] S[n]=\sum_{i=1}^nA[i] S[n]=∑i=1nA[i]
利用前缀和可以很轻松地求出部分和,即数列的某个区间内的和.
s u m ( l , r ) = S [ r ] − S [ l − 1 ] sum(l,r)=S[r]-S[l-1] sum(l,r)=S[r]−S[l−1].
二维前缀和
二维空间上的前缀和.
实际上很直接.
S [ n , m ] = ∑ i = 1 n ∑ j = 1 m A [ i ] [ j ] S[n,m]=\sum_{i=1}^n\sum_{j=1}^mA[i][j] S[n,m]=∑i=1n∑j=1mA[i][j].
差分数列
给定数列A的差分数列为
B [ 1 ] = A [ 1 ] , B [ i ] = A [ i ] − A [ i − 1 ] B[1]=A[1],B[i]=A[i]-A[i-1] B[1]=A[1],B[i]=A[i]−A[i−1].
差分数列的前缀和数列即为原数列.
数列的表示
数列和它的前缀和数列,差分数列是唯一对应的.
因此是同一种信息的不同表示形式.
因此有很多数据结构上的技巧.
例如,将某一区间内的值均上升常数.
在原数列上操作的复杂度为n,但在差分数列上,一下子就可以完成.