本文最后更新于 296 天前,其中的信息可能已经有所发展或是发生改变。
前缀和(Prefix Sum)是一种数据预处理技术,主要用于提高计算数组或序列连续子区间和的效率。前缀和数组通常是原始数组的一个附加数组,其中每个元素是原数组到当前位置(包括当前位置)的所有元素之和。
例题:https://ac.nowcoder.com/acm/problem/226282
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 1e5 + 5;
int a[N];
ll prefix[N];
int main(){
int n, q;
cin >> n >> q;
prefix[0] = 0;
for(int i = 1; i <= n; i ++) {
cin >> a[i];
prefix[i] = prefix[i - 1] + a[i];
}
while(q --) {
int l, r;
cin >> l >> r;
// 利用前缀和计算区间和
ll sum = (l > 0 ? prefix[r] : 0) - (l > 0 ? prefix[l - 1] : 0);
cout << sum << endl;
}
return 0;
}
其中,prefix[r] 是索引 r 之前(包括 r)所有元素的和,如果 l > 0,则还需要减去 prefix[l – 1] 来排除掉索引 l 之前的部分,从而得到准确的区间和。
总结来说,前缀和运算就是预先计算出原数组每个位置之前所有元素的累计和,以便后续快速计算子区间的和。这种方法尤其在频繁查询区间和的情况下,可以极大降低时间复杂度,将原本需要线性时间复杂度的操作转换为常数时间复杂度。