#include <iostream>
using namespace std;
const int N = 1e5 + 10;
int n,q,a[N],s[N];
int main()
{
cin >> n >> q;
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(q--)
{
int l,r;
cin >> l >> r;
cout << s[r] - s[l - 1] << endl;
}
return 0;
}
前缀和需要记得主要是思路:
S[i] = a[1]+a[2]+a[3]...+a[i-1]+a[i];
将一组数据a[N]的前n、n - 1、n -2、n - 3、n - 4…1项的和存储在另一个数组s[N]中,在求a[N]一段区间的数值差时运行时间会少很多。
注意点:
数组要从i = 1开始存储,s累加的需要;
指定区间的边界l需要减1。