题目描述
给定 n 个正整数组成的数列 a1,a2,⋯,an 和 m 个区间 [li,ri],分别求这 m 个区间的区间和。
输入格式
第一行,为一个正整数 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≤,1≤ai≤
。
暴力只能得40%,要用前缀和优化
cpp
#include<iostream>
using namespace std;
int n, m;
const int N = 1e5+10;
int a[N];
int main()
{
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
cin>>n;
for(int i=1; i<=n; ++i)
{
cin>>a[i];
a[i] += a[i-1]; //前缀和
}
cin>>m;
while(m--)
{
int r, l;
cin>>r>>l;
int ans = 0;
ans = a[l]-a[r-1];
cout<<ans<<'\n';
}
return 0;
}