前缀和:(类似数列前n项和)
用sum数组记录前i项和
sum[i]=a[0]+a[1]...+a[i]
用途:可以快速求得区间【i,j】所有数的和
两式相减得证
/*前缀和注意要点:
1. 已知num数组,再申请一个同样大小的sum数组
2. 为了方便计算,num数组和sum数组一律以下标1为第一个元素
3. 边输入,边更新sum数组
sum[0]=0;
for(int i=1;i<=n;i++)
{
cin>>num[i];
sum[i]=sum[i-1]+a[i];
}
4. 求sum[i..j](即第i个数到第j个数的和)
sum[i..j]=sum[j]-sum[i-1]
如果i等于1,sum[1..j]=sum[j]-sum[0]=sum[j]
所以,num&&sum数组从1开始且sum[0]=0
#include<iostream>
using namespace std;
int sum[100001];
int a[100001];
int n,m;
int main(){
cin>>n>>m;
for(int i=1;i<=n;i++){
cin>>a[i];
sum[i]=sum[i-1]+a[i];
}
while(m--){
int l,r;
cin>>l>>r;
cout<<sum[r]-sum[l-1]<<endl;
}
return 0;
}