一维前缀和

2017-08-27 09:30:59

writer:pprp

很基础的一个知识点,想要求区间内的和,可以考虑用两个前n项和 相减

输入输出部分,采用自己写的一个函数,用getchar() putchar()来读取和输出结果

用的时候应该注意具体的具体的类型应该根据题目选定

代码如下:

/*
@theme:一维前缀和
@writer:pprp
@declare:a[i] = s[i] - s[i-1]
@date:2017/8/27
*/

#include <bits/stdc++.h>

using namespace std;

const int maxn = 1000010;

int n, m, a[maxn];

//输入优化
inline int read()
{
    int X=0,w=1; char ch=0;
    while(ch<'0' || ch>'9') {if(ch=='-') w=-1;ch=getchar();}
    while(ch>='0' && ch<='9') X=(X<<3)+(X<<1)+ch-'0',ch=getchar();
    return X*w;
}

inline void write(int x)
{
     if(x<0) putchar('-'),x=-x;
     if(x>9) write(x/10);
     putchar(x%10+'0');
}

int main()
{
    n = read();
    m = read();

    a[0] = read();

    //前n项求和 S[i]
    for(int i = 1; i < n ; i++)
    {
        a[i] = read();
        a[i] += a[i-1];
    }

    for(int i = 0 ; i < m ; i++)
    {
        int l, r;
        l = read();
        r = read();
        if(l == 1)
            write(a[r-1]);
        else
            write(a[r-1] - a[l-2]);
        putchar('
');
    }
    return 0;
}

 

原文地址:https://www.cnblogs.com/pprp/p/7439636.html