Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
---|---|---|---|---|---|---|---|---|---|
44572 | Ryan123 | 课堂检测 | C++ | 通过 | 100 | 204 MS | 1840 KB | 747 | 2022-02-09 10:31:31 |
#include <bits/stdc++.h> using namespace std; typedef long long ll; ll a[500001],bl[500001],lazy[500001]; int n,m,block; void Add(ll l,ll r,ll val) { if(l>r) swap(l,r); for(int i=l; i<=min(r,bl[l]*block); i++) a[i]+=val; if(bl[l]!=bl[r]) for(int i=block*(bl[r]-1)+1; i<=r; i++) a[i]+=val; for(int i=bl[l]+1; i<=bl[r]-1; i++) lazy[i]+=val; } int main() { cin>>n; block=sqrt(n); for(int i=1; i<=n; i++) { cin>>a[i]; bl[i]=(i-1)/block+1; } cin>>m; for(int i=1,opt,l,r,k; i<=m; i++) { cin>>opt; if(opt==1) { cin>>l>>r>>k; Add(l,r,k); } if(opt==2) { cin>>k; cout<<a[k]+lazy[bl[k]]<<'\n'; } } return 0; }