真是暴力
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <vector>
#include <cmath>
using namespace std;
vector<int> Vec[600];
int stack[250000],belong[250000],n,cnt,cntinsert=0,sz,blocknum;
void rebuild(void){
for(int i=1;i<=blocknum;i++){
for(int j=0;j<Vec[i].size();j++)
stack[++cnt]=Vec[i][j];
Vec[i].clear();
}
sz=sqrt(cnt);
blocknum=cnt/sz;
if(cnt/sz)
blocknum++;
for(int i=1;i<=cnt;i++)
belong[i]=(i-1)/sz+1;
for(int i=1;i<=cnt;i++)
Vec[belong[i]].push_back(stack[i]);
cnt=0;
}
void insert(int r,int c){
int posi=1;
while(posi<=blocknum&&r>Vec[posi].size()){
r-=Vec[posi].size();
posi++;
}
Vec[posi].insert(Vec[posi].begin()+r-1,c);
if(Vec[posi].size()>20*sz)
rebuild();
}
int query(int r){
int posi=1;
while(posi<=blocknum&&r>Vec[posi].size()){
r-=Vec[posi].size();
posi++;
}
return Vec[posi][r-1];
}
int main(){
scanf("%d",&n);
for(cnt=1;cnt<=n;cnt++)
scanf("%d",&stack[cnt]);
rebuild();
for(int i=1;i<=n;i++){
int opt,l,r,c;
scanf("%d %d %d %d",&opt,&l,&r,&c);
if(opt==0){
insert(l,r);
++cntinsert;
}
else
printf("%d
",query(r));
}
}