Run ID 作者 问题 语言 测评结果 分数 时间 内存 代码长度 提交时间
44604 xit. 数列操作4 C++ 通过 100 81 MS 2872 KB 1307 2022-02-09 11:15:16

Tests(10/10):


#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; }


测评信息: