题目
题解
这道题是一维前缀和的模板题
这里简单讲一下一维前缀和 它的用处在于可以以O(1)的时间复杂度求出子段和 下面说说是如何实现的
p是前缀和数组 , a是原数组
p[i] =a[1] + ... + a[i] 其实也就是 p[i]= p[i-1] + a[i]
怎么求出子段和
比如说我们现在要求 [l,r]的子段和 我们只要让 p[r]-p[l-1] 即可
下面看代码
#include<bits/stdc++.h>
using namespace std;
#define ll long long
const int N = 1e5+9;
int a[N];//原数组
ll p[N];// 前缀和数组
int main(){
int n; cin >>n;
for(int i=1;i<=n;i++) cin >> a[i];
for(int i=1;i<=n;i++ ) p[i]=p[i-1] + a[i]; //求前缀和
int m; cin >>m;
while (m--) {
int l,r; cin >> l >> r;
cout << p[r]-p[l-1] << "\n"; //直接做差就好了
}
}