Some Notes

Be hard-working every day.

前缀和

开始

前缀和是一种优化算法,用于求区间和。若数据范围特别大,写 for 循环很可能会爆时间复杂度,就可以用上前缀和了。前缀和有一维前缀和二维前缀和,我暂时还没有学二位前缀和,故在此不多赘述。

使用

一维前缀和需要把一个数组比如数组 数组长度)储存到另一个数组中比如 数组 。那么:

我们发现:

这正好是一个递推的过程,

同时,若 为左边界, 为又边界, 的区间和。

例题

前缀和模板

题目描述

给出一个数字 表示有个数字,
给出 个整数

给出一个数字 。有 个询问:
每次询问给出两个整数 ,请求出

输出格式

个整数,每一个换一行。

样例

输入
5
1 2 3 4 5
3
1 2
2 3
1 5
输出
3
5
15

提示

,


这道题目应该这样写
#include <cstdio>
using namespace std;

int a[100001], b[100001];
int n, m;
int main()
{
    scanf("%d", &n);
    for(int i = 1; i <= n; i ++)
    {
        scanf("%d", &a[i]);
    }
    
    b[1] = a[1];
    for(int i = 1; i <= n; i ++)
    {
        b[i + 1] += b[i] + a[i + 1];
    }
    
    scanf("%d", &m);
    for(int i = 1; i <= m; i ++)
    {
        int s, e;
        scanf("%d %d", &s, &e);
        printf("%d\n", b[e] - b[s - 1]);
    }
    
    return 0;
}