#include<bits/stdc++.h>
using namespace std;
int n,t,bl[50005],a[50005],lz[230];
inline void add(int l,int r,int c){
int r1=min(bl[l]*t,r);
for(int i=l;i<=r1;i++)a[i]+=c;
if(bl[l]!=bl[r])
for(int i=(bl[r]-1)*t+1;i<=r;i++)a[i]+=c;
for(int i=bl[l]+1;i<=bl[r]-1;i++)lz[i]+=c;
return ;
}
int main(){
scanf("%d",&n);
t=sqrt(n);
for(int i=1;i<=n;i++){
scanf("%d",&a[i]);
bl[i]=(i-1)/t+1;
}
int opt,l,r,c;
while(n--){
scanf("%d%d%d%d",&opt,&l,&r,&c);
if(opt)printf("%d\n",lz[bl[r]]+a[r]);
else add(l,r,c);
}
}
【LOJ6277】【分块】数列分块入门1
最新推荐文章于 2022-04-25 21:39:41 发布