用差分数组就能解决问题了!
#include<cstdio>
#include<iostream>
#include<algorithm>
using namespace std;
typedef long long ll;
#define MAX 500010
int n,m;
ll tree[MAX];
ll a[MAX];
int lowbit(int x){
return x&(-x);
}
void add(int x,ll k){
while(x<=n){
tree[x]+=k;
x+=lowbit(x);
}
return;
}
ll sum(int x){
ll rec=0;
while(x>=1){
rec+=tree[x];
x-=lowbit(x);
}
return rec;
}
int main(){
ios::sync_with_stdio(false);
cin>>n>>m;
for(int i=1;i<=n;i++){
cin>>a[i];
}
for(int i=1;i<=n;i++){
add(i,a[i]-a[i-1]);
}
for(int i=1;i<=m;i++){
int pd;
cin>>pd;
if(pd==1){
int l,r,key;
cin>>l>>r>>key;
add(l,key);
add(r+1,-key);
}
else if(pd==2){
int x;
cin>>x;
cout<<sum(x)<<endl;
}
}
return 0;
}