P3374
#include<bits/stdc++.h>
using namespace std;
#define maxn 500010
int a[maxn],f[maxn],n,m;
int lowbit(int x){
return x&-x;
}
void addion(int x,int y){
while(x<=n){
f[x]+=y;
x+=lowbit(x);
}
}
int getsum(int x){
int ans=0;
while(x){
ans+=f[x];
x-=lowbit(x);
}
return ans;
}
int main(){
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++){
scanf("%d",&a[i]);
addion(i,a[i]);
}
while(m--){
int t,x,y;
scanf("%d%d%d",&t,&x,&y);
if(t==1) addion(x,y);
if(t==2) printf("%d\n",getsum(y)-getsum(x-1));
}
return 0;
}
P3368
#include<bits/stdc++.h>
using namespace std;
#define maxn 500010
int a[maxn],f[maxn],n,m,c[maxn];
int lowbit(int x){
return x&-x;
}
void addion(int x,int y){
while(x<=n){
f[x]+=y;
x+=lowbit(x);
}
}
int getsum(int x){
int ans=0;
while(x){
ans+=f[x];
x-=lowbit(x);
}
return ans;
}
int main(){
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++){
scanf("%d",&a[i]);
c[i]=a[i]-a[i-1];
addion(i,c[i]);
}
while(m--){
int t,x,y,z;
scanf("%d",&t);
if(t==1){
scanf("%d%d%d",&x,&y,&z);
c[x]+=z,c[y+1]-=z;
addion(x,z);
addion(y+1,-z);
}
if(t==2){
scanf("%d",&x);
printf("%d\n",getsum(x));
}
}
return 0;
}