分析:
一维前缀和有两个重要公式:
公式①:前
i
i
i 个数的前缀和等于前
i
−
1
i - 1
i−1 个数的前缀和再加上
a
[
i
]
a[i]
a[i]。
公式②:作用是能快速求出原数组当中一段数的和。
前缀和里一定要让下标从
1
1
1 开始,同时置
s
[
0
]
s[0]
s[0] 为
0
0
0,保证边界不出问题。
当我们需要求区间和是需要遍历整个区间,时间复杂度是 O ( n ) O(n) O(n),但若先构造前缀和数组,便可用 O ( 1 ) O(1) O(1) 的时间进行计算。
代码(C++)
#include <iostream>
using namespace std;
const int N = 100010;
int a[N], s[N];
int n, m;
int main()
{
cin >> n >> m;
for (int i = 1; i <= n; i ++) cin >> a[i];
for (int i = 1; i <= n; i ++) s[i] = s[i - 1] + a[i];
while (m --)
{
int l, r;
cin >> l >> r;
cout << s[r] - s[l - 1] << endl;
}
}