#include<bits/stdc++.h>
using namespace std;
const int maxn=1e5+10,blen=450,blim=blen*2;
//===============================================
int siz[blen],nxt[blen],blc[blen][blim+10];
int n,tot=1;
pair<int, int> askdis(int dis)
{
int now=1;
while(dis>siz[now])
{
dis-=siz[now];
now=nxt[now];
}
//pair<int, int> tmp=make_pair(now,dis);
return make_pair(now,dis);
}
void rmk(int bnum)
{
tot++;
for(int i=blen+1;i<=siz[bnum];i++)
{
blc[tot][i-blen]=blc[bnum][i];
blc[bnum][i]=0;
siz[bnum]--;siz[tot]++;
}
int x1=nxt[bnum],x2=tot;
nxt[bnum]=x2;nxt[x2]=x1;
}
void ins(int dis,int x)
{
pair<int,int> noww=askdis(dis);
int nowb=noww.first,dis1=noww.second;
for(int i=siz[nowb]+1;i>=dis1+1;i--)
blc[nowb][i]=blc[nowb][i-1];
blc[nowb][dis1]=x;
siz[nowb]++;
if(siz[nowb]>=blim) rmk(nowb);
}
int ask(int dis)
{
pair<int,int> now=askdis(dis);
int nowb=now.first,dis1=now.second;
return blc[nowb][dis1];
}
//===============================================
inline int read()
{
int f=1,r=0;char c=getchar();
while(c<'0'||c>'9'){if(c=='-') f=-1;c=getchar();}
while(c>='0'&&c<='9'){r=r*10+c-'0';c=getchar();}
return f*r;
}
int main()
{
n=read();
for(int i=1;i<=n;i++)
{
/*
int a=read();
ins(i,a);
*/
int a=read(),bnum=(i-1)/blen+1;
blc[bnum][i-(bnum-1)*blen]=a;
siz[bnum]++;
}
tot=(n-1)/blen+1;
for(int i=1;i<tot;i++)
nxt[i]=i+1;
for(int i=1;i<=n;i++)
{
int a=read(),b=read(),c=read(),d=read();
if(a==0) ins(b,c);
if(a==1) cout<<ask(c)<<endl;
}
return 0;
}
loj6282 数列分块入门5