树状数组模板
#include<iostream>
#include<cstdio>
#include<string.h>
using namespace std;
const int N = 100010;
int n,m,a[N],c[N];
int lowbit(int x)
{
return x & (-x);
}
void updata(int x, int k)//单点更新
{
while(x <= n)
{
c[x] += k;
x += lowbit(x);
}
}
int query(int x)//求1--x的和
{
int ans = 0;
while(x)
{
ans += c[x];
x -= lowbit(x);
}
return ans;
}
int main()
{
scanf("%d%d",&n,&m);
memset(c,0,sizeof c);
for(int i=1;i<=n;i++)
{
scanf("%d",&a[i]);
updata(i,a[i]);
}
for(int i=0;i<m;i++)
{
int l,r;
scanf("%d%d",&l,&r);
int ans = query(r) - query(l-1);
printf("%d\n",ans);
}
return 0;
}