Description
假如有10个数
15 16 17 18 19 11 12 13 14 15
问第2个数到第4个数之和,那么答案就是16+17+18,这个称为区间和
Input
第一行一个整数n,表示有n个数。
第二行有n个整数。
第三行一个整数m,表示询问次数。
接下来m行每行两个整数l,r,表示询问区间,询问从第l个数到第r个数的和(n,l,r,m<=10^5)
7
2 -4 3 -1 2 -4 3
3
1 2
3 5
2 6
HINT
前缀和=前n个数之和
区间和=一段范围内数字之和
用一个a[]数组装数字
用一个sum[]数组装总和
sum[1]=a[1]=前1个数之和
sum[2]=a[1]+a[2]=前2个数之和
sum[3]=a[1]+a[2]+a[3]=前3个数之和
......
sum[n]=a[1]+a[2]+a[3]+....+a[n-1]+a[n]=前n个数之和
那么:
sum[10]-sum[5]=a[6]+a[7]+a[8]+a[9]+a[10];
求a[6]~a[10]之和=sum[10]-sum[5]
求a[l]~a[r]之和=sum[r]-sum[l-1];
准备工作:
sum[]数组怎么计算?
sum[1]=sum[0]+a[1];
sum[2]=sum[1]+a[2];
sum[3]=sum[2]+a[3];
...
sum[i]=sum[i-1]+a[i];
for(int i=1;i<=n;i++)
{
cin>>a[i];//一边输入
sum[i]=sum[i-1]+a[i];//一边计算前缀和
}