【题目描述】
给定 n 个正整数组成的数列 a1, a2, ⋯,an 和 m 个区间 [li,ri],分别求这 m 个区间的区间和。
对于所有测试数据,n, m ≤ 10^5, ai ≤ 10^4
【输入格式】
第一行,为一个正整数 n 。
第二行,为 n 个正整数 a1, a2, ⋯, an
第三行,为一个正整数 m 。
接下来 m 行,每行为两个正整数 li,ri ,满足 1 ≤ li ≤ ri ≤ n
【输出格式】
共 m 行。
第 i 行为第 i 组答案的询问。
输入输出样例
【输入】
4
4 3 2 1
2
1 4
2 3
【输出】
10
5
说明/提示
样例解释:第 1 到第 4 个数加起来和为 10。第 2 个数到第 3 个数加起来和为 5。
对于 50% 的数据:n, m ≤ 1000;
对于 100% 的数据:1 ≤ n, m ≤ 10^5,1 ≤ ai ≤ 10^4
【算法】
什么是前缀和?
前缀和是指某项数列n项的和。
sum[i]=a[1]+a[2]+a[3]+...+a[i]=sum[i-1]+a[i]
前缀和有什么作用?
能快速求出一个区间的和。
[l,r]=sum[r]-sum[l-1]
【代码】
#include<bits/stdc++.h>
using namespace std;
int n,m,l,r,s[100005],sum[100005];
int main()
{
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>s[i];
sum[i]=sum[i-1]+s[i];//算出前缀和
}
cin>>m;
for(int i=1;i<=m;i++)
{
cin>>l>>r;
int ans=0;
ans=sum[r]-sum[l-1];//算出区间和
cout<<ans<<endl;
}
return 0;
}
看没看懂都点个赞再离开吧!!!