树状数组 2 死得真惨……
code:
#include<bits/stdc++.h>
using namespace std;
#define int long long
int n,m,c[500001],s,a[500001],h,k,x,y;
int lb(int k){
return k&(-k);
}
void change(int p,int q){
while(p<=n){
c[p]+=q;
p+=lb(p);
}
}
int sum(int k){
s=0;
while(k){
s+=c[k];
k-=lb(k);
}
return s;
}
signed main(){
cin>>n>>m;
for(int i=1;i<=n;i++){
cin>>a[i];
change(i,a[i]);
}
for(int i=1;i<=m;i++){
cin>>h>>x;
if(h==1){
cin>>y>>k;
change(x,k);
change(y+1,-k);
}
else cout<<sum(x)<<endl;
}
}
可能错的很伞兵,大佬轻喷