题源 记录一哈前缀和吧
题目描述
给定 n 个正整数组成的数列 a1,a2,⋯,an 和 m 个区间[li,ri],分别求这 m 个区间的区间和。
对于所有测试数据,m≤10^5,ai≤10^4
输入格式
第一行,为一个正整数 n 。
第二行,为 n 个正整数 a1,a2,⋯,an
第三行,为一个正整数 m 。
接下来 m 行,每行为两个正整数 li,ri ,满足1≤li≤ri≤n
输出格式
共 m 行。
第 i 行为第 i 组答案的询问。
输入输出样例
输入 #1复制
4 4 3 2 1 2 1 4 2 3输出 #1复制
10 5说明/提示
样例解释:第 1 到第 4 个数加起来和为 10。第 2 个数到第 3 个数加起来和为 5。
对于 50% 的数据:n,m≤1000;
对于 100% 的数据:1≤n,m≤10^5,1≤ai≤10^4
还是容易理解的,就不多废话了
看代码
#include<bits/stdc++.h>
using namespace std;
int n,m;
int l,r;
int a[100005]={0};
long long sum[100005]={0};
int get_sum(int l,int r)
{if(l==1){return sum[r];}else{return sum[r]-sum[l-1];}
}
int main()
{cin>>n;for(int i=1;i<=n;i++){cin>>a[i];sum[i]=sum[i-1]+a[i];//记录每个位置之前的和}cin>>m;for(int i=1;i<=m;i++){cin>>l>>r;cout<<get_sum(l,r)<<endl;}return 0;
}