代码如下:
#include<bits/stdc++.h>
using namespace std;
int n,m,l,r,x;
long long c[500010],k,a;
int lowbit(int x){
return x&(-x);
}
void change(int x,long long y){
while(x<=n){
c[x]+=y;
x+=lowbit(x);
}
}
long long solve(int x){
long long cnt=0;
while(x){
cnt+=c[x];
x-=lowbit(x);
}
return cnt;
}
int main(){
scanf("%d%d",&n,&m);
long long now=0;
for(int i=1;i<=n;i++){
scanf("%lld",&a);//这里的now相当于上一个a[i-1]
change(i,a-now);
now=a;//更新
}
while(m--){
scanf("%d",&x);
if(x==1){
scanf("%d%d%lld",&l,&r,&k);
change(l,k);//差分
change(r+1,-k);//差分
}
else{
int s;
scanf("%d",&s);
printf("%lld\n",solve(s));//求和
}
}
return 0;
}
1049

被折叠的 条评论
为什么被折叠?



