https://www.luogu.org/problem/show?pid=3368
对每个区间中的每个数进行操作,输出某一个数的值。
对区间操作时,应该让 [1-(l-1)]-x, [1-r] +x.
#include<iostream>
#include<cstdio>
using namespace std;
using namespace std;
int n,m,a[500005],p,x,y,z,t[500005];
int lowbit(int x){
return x&-x;
}
void add(int x,int y){
while(x){
t[x]+=y;
x-=lowbit(x);
}
}
int query(int x){
int sum=a[x];
while(x<=n){
sum+=t[x];
x+=lowbit(x);
}
return sum;
}
int main(){
cin>>n>>m;
for (int i=1;i<=n;i++)
scanf("%d",&a[i]);
for (int i=1;i<=m;i++){
scanf("%d",&p);
if (p==1) {
scanf("%d%d%d",&x,&y,&z);
add(y,z);
add(x-1,-z);
}
else {
scanf("%d",&x);
cout<<query(x)<<endl;
}
}
return 0;
}