题目描述
苹果丰收了,有n堆苹果,小红就在苹果堆旁。小红已经知道了每堆苹果有多少个。她要问一问从第a堆到第b堆一共有多少个苹果。
输入
输入数字n,然后输入n个数据。再输入m,然后输入m行数据。
输出
输出m次a到b堆一共有多少个。
样例输入 Copy
5 1 2 3 4 5 3 1 3 2 4 1 5
样例输出 Copy
6 9 15
提示
对于%80的数据:0≤n≤10000;
对于%100的数据:0≤n≤100000。
#include <iostream>
using namespace std;
#define MX 100000
long long int a[MX + 10], b[MX + 10];
int main()
{
int n;
long long int cnt;
scanf("%d",&n);
for(int i = 1; i <= n; i++)
{
scanf("%lld",&a[i]);
b[i] = b[i - 1] + a[i];
}
int x,y;
int m;
scanf("%d",&m);
while(m--)
{
scanf("%d%d",&x,&y);
cnt = b[y]-b[x - 1];
printf("%lld\n",cnt);
}
return 0;
}
是属于前缀和的一道题,这个是不超时的,如果是双层循环的话会时间超限