H 子段求和(51Nod 1081)

                     H 子段求和

给出一个长度为N的数组,进行Q次查询,查询从第i个元素开始长度为l的子段所有元素之和。

例如,1 3 7 9 -1,查询第2个元素开始长度为3的子段和,1 {3 7 9} -1。3 + 7 + 9 = 19,输出19。
Input第1行:一个数N,N为数组的长度(2 <= N <= 50000)。 
第2 至 N + 1行:数组的N个元素。(-10^9 <= N ii <= 10^9) 
第N + 2行:1个数Q,Q为查询的数量。 
第N + 3 至 N + Q + 2行:每行2个数,i,l(1 <= i <= N,i + l <= N) Output共Q行,对应Q次查询的计算结果。 Sample Input
5
1
3
7
9
-1
4
1 2
2 2
3 2
1 5
Sample Output
4
10
16
19
 
 
 
 
这道题我开始是从第i个数直接加到i+l-1,然后交上去果然超限了
然后就先加再减。。。。我好像讲不清楚,反正看代码吧!
 
 
代码:
 
 
#include <iostream>
#include <stdio.h>
#include <cstring>
using namespace std;
long long d[50005];
int main()
{
    int n;
    cin>>n;
    memset(d,0,sizeof(d));
    for(int i=1;i<=n;i++)
    {
        unsigned long long ans;
        scanf("%llu",&ans);
        d[i]=d[i-1]+ans;
    }
    int q;
    cin>>q;
    while(q--)
    {
        int l,r;
        cin>>l>>r;
        int k=r+l-1;
        cout<<d[k]-d[l-1]<<endl;
    }
    return 0;
}


猜你喜欢

转载自blog.csdn.net/chimchim04/article/details/78634186
今日推荐