Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
---|---|---|---|---|---|---|---|---|---|
44604 | xit. | 数列操作4 | C++ | 通过 | 100 | 81 MS | 2872 KB | 1307 | 2022-02-09 11:15:16 |
#include<bits/stdc++.h> using namespace std; const int MAXN=2e5+5; int a[MAXN]; 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; }