B3612 【深进1.例1】求区间和(前缀和)
阅读原文时间:2023年08月26日阅读:3

【深进1.例1】求区间和

【深进1.例1】求区间和

题目描述

给定 \(n\) 个正整数组成的数列 \(a_1, a_2, \cdots, a_n\) 和 \(m\) 个区间 \([l_i,r_i]\),分别求这 \(m\) 个区间的区间和。

输入格式

共 \(n+m+2\) 行。

第一行,为一个正整数 \(n\) 。

第二行,为 \(n\) 个正整数 \(a_1,a_2, \cdots ,a_n\)

第三行,为一个正整数 \(m\) 。

第 \(4\) 到第 \(n+m+2\) 行,每行为两个正整数 \(l_i,r_i\) ,满足 \(1\le l_i\le r_i\le n\)

输出格式

共 \(m\) 行。

第 \(i\) 行为第 \(i\) 组答案的询问。

样例 #1

样例输入 #1

4
4 3 2 1
2
1 4
2 3

样例输出 #1

10
5

提示

样例解释:第 1 到第 4 个数加起来和为 10。第 2 个数到第 3 个数加起来和为 5。

对于 50% 的数据:\(n,m\le 1000\) ;

对于 100% 的数据:\(1 \leq n,m\le 10^5\),\(1 \leq a_i\le 10^4\)。


#include<bits/stdc++.h>
using namespace std;
int m,n;
int a[100010];
int l,r;
long long ans;
int main(){
    cin>>n;
    for(int i=1;i<=n;i++)
        cin>>a[i];
    cin>>m;
    for(int i=1;i<=m;i++){
        l=0;
        r=0;
        ans=0;
        cin>>l>>r;
        for(int j=l;j<=r;j++)
            ans+=a[j];
        cout<<ans<<endl;
    }
    return 0;
}


#include<bits/stdc++.h>
using namespace std;
int m,n;
int a[100010],s[100010];
int l,r;
long long ans;
int main(){
    cin>>n;
    for(int i=1;i<=n;i++){
        cin>>a[i];
        s[i]=s[i-1]+a[i];
    }
    cin>>m;
    for(int i=1;i<=m;i++){
        ans=0;
        cin>>l>>r;
        ans=s[r]-s[l-1];
        cout<<ans<<endl;
    }
    return 0;
}