题目:1264. 动态求连续区间和
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const int N=1e5+10;
const int mod=100000007;
int n,m;
int a[N];
int pu[N<<2];
void pushup(int u){
pu[u]=pu[u<<1]+pu[u<<1|1];
}
void build(int u,int l,int r){
if(l>=r){
pu[u]=a[l];
return ;
}
int mid=l+r>>1;
build(u<<1,l,mid);
build(u<<1|1,mid+1,r);
pushup(u);
}
void update(int u,int l,int r,int x,int y){
if(l>=r){
a[x]+=y;
pu[u]+=y;
return;
}
int mid=l+r>>1;
if(x<=mid) update(u<<1,l,mid,x,y);
else update(u<<1|1,mid+1,r,x,y);
pushup(u);
}
int findd(int u,int l,int r,int L,int R){
if(L<=l&&r<=R){
return pu[u];
}
if(r<L||l>R) return 0;
int mid=l+r>>1;
int sum=0;
sum=findd(u<<1|1,mid+1,r,L,R);
sum+=findd(u<<1,l,mid,L,R);
return sum;
}
int main(){
cin>>n>>m;
for(int i=1;i<=n;i++){
cin>>a[i];
}
build(1,1,n);
int op,x,y;
for(int i=0;i<m;i++){
scanf("%d%d%d",&op,&x,&y);
if(op==0){
cout<<findd(1,1,n,x,y)<<endl;
}else{
update(1,1,n,x,y);
}
}
return 0;
}