让有一些数组。在没有变化的情况下,我们可以快速(比一行更快)在这个数组的一个子段上找到一些函数的值。为此,我们需要使用额外的内存并进行预计算。
例如,我们需要快速求出数组某段的和。
让我们得到一个前缀和数组,其中索引 i 将是数组中索引小于或等于 i 的所有元素的总和。
一个 [] –给定数组 p[] –前缀和数组


数组计数 p:
显然 p[0] = a[0]。请注意,我们可以很容易地通过 p[i – 重新计算 p[i] 1], 因为i 前缀上的金额是 i 前缀上的金额 – 1 + a[i].
因此,计算前缀和的代码如下所示:

int a[n], p[n];
p[0] = a[0< /跨度>];
 (int i = 1;我< n;我++)
         p[i] = p[i -  1] + a[i];

此外,我们注意到段上的总和 -前缀上的两个和之间的差异。


绿色 = 红色 -蓝色
因此,如果需要求区间 [l,r] 上的和,那么答案就是 p[r] —— p[l-1].
但是,如果我 - 1 个元素可能不存在。为了不用if’s,可以输入1-indexing,a[0]和p[0]会有中性值(0为和)。
 
请注意,此技术是包含 - 排除公式的特例,因此以这种方式不仅可以存储和,还可以存储其他函数,例如乘法和异或。