acwing 一维前缀和

原题链接

image

题解

解析

  1. 存储方式:
    • 可以使用一个数组进行前缀求和(本题解)
    • 可以使用两个数组,一个保存原数据,一个保存前缀和
  2. 注意事项:
    前缀和数组存的数据必须从下标1开始,因为当左节点为数组首项时,此时范围内的和其实 就是S[r],但是代码中写的是S[r]-S[l],此时l=0,s[l]是有值的,结果错误
    所以从下标1开始来避免这个问题,s[0]=0就可以了

代码

#include "iostream"
#include "vector"
using namespace std;
int main(){
    int n,m,tmp,l,r;
    cin>>n>>m;
    vector<int>num;
    num.push_back(0);
    for(int i=1;i<=n;i++){
        cin>>tmp;
        num.push_back(tmp);
        if(i!=1){
            num[i]+=num[i-1];
        }
    }
    for(int i=0;i<m;i++){
        cin>>l>>r;
        cout<<num[r]-num[l-1]<<endl;
    }
}

posted @ 2023-02-12 17:03  Cheng_Mao  阅读(21)  评论(0)    收藏  举报