···
include[HTML_REMOVED]
include[HTML_REMOVED]
include[HTML_REMOVED]
include[HTML_REMOVED]
using namespace std;
const int N=1e5+10;
int n,m;
int A[N],B[N];
int main(){
int n,m;
scanf(“%d%d”,&n,&m);
for(int i=1;i<=n;i) scanf(“%d”,&A[i]); //确保s【0】是0
for(int i=1;i<=n;i) B[i]=B[i-1]+A[i]; //构造一个前缀和的数列 实现O1时间取值的复杂度
while(m–){
int l,r;
cin>>l>>r;
printf(“%d\n”,B[r]-B[l-1]); //计算区间和构造前缀和
}
return 0;
}
···
前缀和:
用数组处理
时间复杂度为O(1),一维的s[i]=s[i-1]+a[i],为了节省空间也可以用s[N]存原数组,也存和,边输入,边处理
由于边界问题,人为规定下标从0开始,避免越界
一个数组的话s[i]+=s[i-1]
逗死了,哈哈