树状数组差分
2025-07-16 21:10:40
发布于:浙江
#include<bits/stdc++.h>
using namespace std;
int n,m,a[500005],f[500005];
int lowbit(int x){
return x&-x;
}
void add(int x,int p){
while(x<=n)f[x]+=p,x+=lowbit(x);
}
int ask(int x){
int ans=0;
while(x>0)ans+=f[x],x-=lowbit(x);
return ans;
}
int main(){
cin >> n >> m;
for(int i=1;i<=n;i++)cin >> a[i];
while(m--){
int q,x,y,z;
cin >> q;
if(q==1){
cin >> x >> y >> z;
add(x,z),add(y+1,-z);
}else{
cin >> x;
cout << ask(x)+a[x] << endl;
}
}
}
全部评论 2
%%%
2025-07-16 来自 湖南
0玩轮椅玩的
2025-07-16 来自 浙江
0真挺好玩的
2025-07-16 来自 浙江
0玩植物大战僵尸玩的
2025-07-17 来自 浙江
02025-07-18 来自 浙江
0
有帮助,赞一个