提交时间:2024-01-04 13:23:34
运行 ID: 119138
#include<bits/stdc++.h> using namespace std; int a[200005],n,vecnum,block; vector<int> vec[2000]; void build() { int len=0; for(int i=1; i<=vecnum; i++){ copy(vec[i].begin(),vec[i].end(),a+len); len+=vec[i].end()-vec[i].begin(); } block=sqrt(len); vecnum=ceil(len*1.0/block); int cur=0,inf=0; for(int i=1; i<=vecnum; i++){ vec[i].resize(block); inf=min(cur+block,len); copy(a+cur,a+inf,vec[i].begin()); cur+=block; } } void Insert(int pos,int v) { bool flag=0; --pos; for(int i=1; i<=vecnum; i++){ if(pos>vec[i].size())pos-=vec[i].size(); else{ vec[i].insert(vec[i].begin()+pos,v); if(vec[i].size()>2*block)flag=1; break; } } if(flag)build(); } int Query(int pos) { --pos; for(int i=1; i<=vecnum; i++) if(pos>=vec[i].size())pos-=vec[i].size(); else return vec[i][pos]; } int main() { scanf("%d",&n); vec[1].resize(n); for(int i=0; i<n; i++)scanf("%d",&vec[1][i]); vecnum=1; build(); for(int i=0,opt,l,r,c; i<n; i++){ scanf("%d%d%d%d",&opt,&l,&r,&c); if(opt)printf("%d\n",Query(r)); else Insert(l,r); } return 0; }