前缀和与差分互为逆操作,其都是认为构造的、用于简化的方法,以下从构造方法和作用两个方面来看这两个操作。
对于一个数组 ,其前缀和定义为 。在代码中,为了便于计算,通常将数组 a[] 从序号 1 开始存储,并令 a[0] = 0,前缀和数组的构造方式如下。
a[]
1
a[0] = 0
1234
vector<int> s(a.size(), 0);for (int i = 1; i < s.size(); i++) { s[i] = s[i - 1] + a[i];}
一维前缀和的作用在于快速求出数组 a[] 在某一区间 [i,j] 的和,为 a[j] - a[i - 1]。
[i,j]
a[j] - a[i - 1]
二维前缀和类似于一维前缀和,但其构造与作用的对象为二维矩阵 。