简述
前缀和,字面意思理解,串的前面连续一段的和。
应用:用来解决多次查询数组中[l,r]区间的和。
如果我们不用前缀和,但是多次都需要数组中某一段的和,每次求[l,r]之间的和的时间复杂度是O(N),用前缀和优化查询时间复杂度是O(1),但是空间复杂度是O(N)。
计算机中很多算法思想都是用空间来换时间。
高中的数列知识:可得下面的公式
为了数组越界,和简化,我们a和s数组都用1来存储,就不需要特判i == 0的情况了
查询[l,r]区间的和:s[r] - s[l - 1]
证明:
核心代码:
//预处理前缀和数组s
for (int i = 1 ; i <= n ; i ++){
s[i] = s[i - 1] + a[i];
}
//m查询
while ( m -- ){
int l , r ;
cin >> l >> r;
cout << s[r] - s[l - 1] << endl;
}