提交时间:2022-02-09 09:26:39

运行 ID: 44507

#include <bits/stdc++.h> using namespace std; long long a[100005],bls[100005],tag[400],bl; inline long long in(long long ans=0,long long f=0) { char c=getchar(); for(; c<'0' || c>'9'; f^=(c=='-'),c=getchar()); for(; c<='9' && c>='0'; c=getchar())ans=(ans<<3)+(ans<<1)+(c^48); return f?-ans:ans; } void change(long long l,long long r,long long c) { for(long long i=l; i<=min(r,bls[l]*bl); i++)a[i]+=c; if(bls[l]^bls[r])for(long long i=(bls[r]-1)*bl+1; i<=r; i++)a[i]+=c; for(long long i=bls[l]+1; i<=bls[r]-1; i++)tag[i]+=c; } int main() { long long n=in(),m; bl=sqrt(n); for(long long i=1; i<=n; i++)a[i]=in(),bls[i]=(i-1)/bl+1; m=in(); while(m--) { long long opt=in(); if(opt==2) { long long k=in(); cout<<a[k]+tag[bls[k]]<<'\n'; } else if(opt==1) { long long l=in(),r=in(),x=in(); if(l>r)swap(l,r); change(l,r,x); } } return 0; }