Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
---|---|---|---|---|---|---|---|---|---|
44534 | xujindong | 数列操作4 | C++ | 通过 | 100 | 77 MS | 2872 KB | 1220 | 2022-02-09 09:59:36 |
#include<bits/stdc++.h> using namespace std; int a[200005]; int 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; }