Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
---|---|---|---|---|---|---|---|---|---|
119138 | 陈家宝 | 数列操作4 | C++ | 通过 | 100 | 134 MS | 2880 KB | 1188 | 2024-01-04 13:23:34 |
#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; }