AcWing 795. 前缀和
原题链接
简单
#include<iostream>
using namespace std;
const int N=100010;
int n,m;
int a[N],s[N];
int main()
{
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++) scanf("%d",&a[i]);
for(int i=1;i<=n;i++) s[i]=s[i-1]+a[i]; //前缀和的初始化
while(m--)
{
int l,r;
scanf("%d%d",&l,&r);
printf("%d\n",s[r]-s[l-1]); //区间和计算
}
return 0;
}
/*
前缀和:如果有一个数组从a1开始,
a1 a2 a3 .........an
前缀和数组定义成si=a1+a2+....+ai ,si就表示原数组里前i个和
**前缀和里面让下标从1开始**
si如何求:s[0]=0 for i=1 i<=n ;i++ s[i]=s[i-1]+a[i]
si用来干嘛的:快速求出原数组里面一段数的和,从l~r:就是算al+a[l+1]+....a[r]
如果没有前缀和数组 就循环一遍O(n)
如果有前缀和数组,就为:s[r]-s[l-1]
*/