[AcWing]795. 前缀和(C++实现)一维前缀和模板题
1. 题目
2. 读题(需要重点注意的东西)
思路:一维前缀和,多用于求区间和,能将O(n)的时间复杂度转换为O(1);
关键代码在于求区间和:l 和 r的区间和为:s[r] - s[l - 1];
3. 解法
---------------------------------------------------解法---------------------------------------------------
#include<iostream>
using namespace std;
const int N = 100010;
int q[N],s[N];
int main(){
int n,m;
cin >> n >> m;
for(int i = 1; i <= n; i++) scanf("%d",&q[i]);
// 构造前缀和
for(int i = 1; i <= n; i++) s[i] = s[i - 1] + q[i];
while(m--){
int l,r;
cin >> l >> r;
// 求区间和
cout << s[r] - s[l - 1] << endl;
}
return 0;
}
4. 可能有帮助的前置习题
5. 所用到的数据结构与算法思想
6. 总结
一维前缀和模板,主要应用于求区间和,推荐完全背下来