本题就是前缀和模板题目
我们需要求出$s_i=$ $\sum a_i$ $(1\le i \le n)$
但是,我们不需要每一次都累加
大家看图
好了
查询就应该这样
$\sum a_i(l \le i \le r)$=$s[r]-s[l-1]$
s[r]=a[1]+a[2]+a[3]+...+a[r];
s[l-1]=a[1]+a[2]+a[3]+...+a[l-1];
s[r]-s[l-1]=(a[1]+a[2]+a[3]+...+a[r])-(a[1]+a[2]+a[3]+...+a[l-1]);
=a[l]+a[l+1]+a[l+2]+...+a[r];
上c++代码
#include<iostream>
using namespace std;
const int N=1e5+10;
int n,m,l,r;
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--) scanf("%d%d",&l,&r),printf("%d\n",s[r]-s[l-1]);
return 0;
}