题目描述
ftiasch有很多糖果,分成了N堆,排成一列。ftiasch说,如果nm能迅速求出第L堆到第R堆一共有多少糖果,就把这些糖果都给他。
现在给出每堆糖果的数量,以及每次询问的L和R,你需要帮助nm,把每次询问的结果求出来。注意,你不需要考虑糖果被nm取走的情况。
输入
第1行,2个整数N,M,分别表示堆数和询问数量。第2行,N个整数Ai,表示第i堆糖果的数量。第3∼(M+2)行,每行2个整数Li,Ri,表示第i个询问是[Li,Ri]。
输出
M行,对于每个询问,输出对应的和。
输出
M行,对于每个询问,输出对应的和。
样例输入 Copy
5 5 1 2 3 4 5 1 5 2 4 3 3 1 3 3 5样例输出 Copy
15 9 3 6 12提示
•对于50%的数据,1≤N,M≤100。
•对于100%的数据,1≤N,M≤100,000,0≤Ai≤10,000,1≤Li≤Ri≤N。
思路:
用前缀和数组记录前n项和,sum[b]-sum[a-1]即为答案
代码:
#include <bits/stdc++.h>
using namespace std;
long long a[100005],sum[100005];
int main()
{
int n,m,i;
cin>>n>>m;
for(i=1;i<=n;i++) scanf("%lld",&a[i]);
for(i=1;i<=n;i++) sum[i]=sum[i-1]+a[i];//计算前缀和
while(m--)
{
int a,b;
scanf("%d%d",&a,&b);
printf("%lld\n",sum[b]-sum[a-1]);
}
return 0;
}