解题思路
树状数组的模板板题.区间和等于前缀和相减
代码
#include<iostream>
#include<cstdio>
#include<iomanip>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<queue>
using namespace std;
int n,m,x,y,k,a[1000100];
long long c[1000100];
void add(int x,int y){//对某个元素进行加法操作
for(int i=x;i<=n;i+=i&(-i))
c[i]+=y;
}
long long sum(int x){//查询前缀和
long long ans=0;
for(int i=x;i>0;i-=i&(-i))
ans+=c[i];
return ans;
}
int main(){
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++)
{
scanf("%d",&a[i]);
add(i,a[i]);
}
for(int i=1;i<=m;i++)
{
scanf("%d%d%d",&k,&x,&y);
if(k==1)
add(x,y);
if(k==2)
printf("%lld\n",sum(y)-sum(x-1));
}
}