提交时间:2022-02-09 10:29:59
运行 ID: 44569
#include<bits/stdc++.h> using namespace std; const int MAXN=100007; long long a[MAXN],bl[MAXN],a_flag[MAXN],n,m,blo,opt; long long min(long long a,long long b){ if(a>b)return b; else return a; } void add(int l,int r,int z){ for(int i=l;i<=min(r,bl[l]*blo);i++)a[i]+=z; if(bl[l]!=bl[r]){ for(int i=(bl[r]-1)*blo+1;i<=r;i++)a[i]+=z; } for(int i=bl[l]+1;i<=bl[r]-1;i++)a_flag[i]+=z; } int main(){ scanf("%d",&n); blo=(int)sqrt(n); for(int i=1;i<=n;i++){ scanf("%lld",&a[i]); bl[i]=(i-1)/blo+1; } scanf("%d",&m); int l,r,c; for (int i=1;i<=m;i++){ scanf("%d",&opt); if(opt==1){ scanf("%d%d%d",&l,&r,&c); add(l,r,c); } else{ scanf("%d",&l); long long ans=a[l]+a_flag[bl[l]]; printf("%lld\n",ans); } } return 0; }