开始
前缀和是一种优化算法,用于求区间和。若数据范围特别大,写 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;
}