前缀和
我们假设数组是从下标1开始的,设数组a为{1,2,3,4,5},那么代表数组a的前缀和的数组b为{1,2,6,10,15},即b[n]=a[1]+…+a[n]。
通过前缀和,我们可以轻易求出a[l]到a[r]的和,即b[r]-b[l-1],因为b[l-1]=a[1]+…+a[l-1],b[r]=a[1]+…+a[r],b[r]-b[l-1]=a[l]+…+a[r]。
代码如下:
#include <stdio.h>
#define N 10001
int main()
{
int i,m,n,l,r,a[N]={0},b[N]={0};
scanf("%d%d",&m,&n);
for(i=1;i<=m;i++)
{
scanf("%d",&a[i]);
b[i]=b[i-1]+a[i];
}
while(n--)
{
scanf("%d%d",&l,&r);
printf("%d\n",b[r]-b[l-1]);
}
return 0;
}