前缀和
一维前缀和
例如数列a={2,3,4,7,9},则对应的前缀和数列为sum={2,5,9,16,25}
sum[i]=sum[i-1]+a[i]//其实就是记入累加的和
应用
求第L个数到第R个数的和。
二维前缀和
假设一个矩阵
1 | 2 | 4 | 3 |
---|---|---|---|
5 | 1 | 2 | 4 |
6 | 6 | 2 | 9 |
则该矩阵的二维前缀和为
1 | 3 | 7 | 10 |
---|---|---|---|
6 | 9 | 15 | 22 |
12 | 21 | 29 | 45 |
易得
sum[i][j]=sum[i-1][j]+sum[i][j-1]-sum[i-1][j-1]+a[i][j];
应用
懂得懂得
差分
一维差分(即一维前缀和的逆过程)
例如数列a={(0),1,2,3,3,3,3},则对应的差分数列d={1,1,1,0,0,0}
d[i]=a[i]-a[i-1];
应用
多次对序列的一个区间加上一个数,并在最后询问某一位的数或是多次询问某一个的数。例如:使[l,r]每个数加上k,即d[l]–>d[l]+k,d[r+1]–>d[r+1]-k,最后再对a[l,r]做一次前缀和。