前缀和简介
a[] = {a1, a2, a3, ..., an }
前缀和:下标要从1开始
s[i] = a[1] + a[2] + ... + a[i]
作用求 求区间 [l, r] 之间的;数据之和 = s[r] - s[l - 1]
for (int i = 1; i <= n; i ++) s[i] = s[i - 1] + a[i]
s[0]要为0,为了处理边界
题目
输入格式:
第一行先输入 m, n
接下来输入m的数据
n为查询次数
每次输入两个整数 l r
输出格式:
输出n行 每行为从l到r的数据和
#include <iostream>
using namespace std;
const int N = 1e6 +10;
int n, m;
int a[N], S[N];
int main()
{
ios::sync_with_stdio(false); //提高 cin 的读取速度 但用不了scanf
cin >> n >> m;
for (int i = 1; i <= n; i ++)
{
cin >> a[i];
S[i] = S[i-1] + a[i];
}
while(m --)
{
int l, r;
cin >> l >> r;
cout << S[r] - S[l - 1] <<endl;
}
system("pause");
}