提交时间:2022-02-09 10:36:59

运行 ID: 44580

#include <bits/stdc++.h> using namespace std; int n,m,bl[100005],block; long long a[100005],tag[100005]; void Add(int l,int r,int x) { for (int i=l; i<=min(bl[l]*block,r); i++) a[i]+=x; if (bl[l]!=bl[r]) for (int i=block*(bl[r]-1)+1; i<=r; i++) a[i]+=x; for (int i=bl[l]+1; i<=bl[r]-1; i++) tag[i]+=x; } int main() { scanf("%d",&n); block=sqrt(n); for (int i=1; i<=n; i++) { scanf("%d",&a[i]); bl[i]=(i-1)/block+1; } scanf("%d",&m); while (m--) { int cnt; scanf("%d",&cnt); if (cnt==1) { int l,r,x; scanf("%d%d%d",&l,&r,&x); Add(l,r,x); } else { int x; scanf("%d",&x); printf("%lld\n",a[x]+tag[bl[x]]); } } return 0; }