#include<bits/stdc++.h>
#define reg register int
#define il inline
#define numb (ch^'0')
using namespace std;
typedef long long ll;
il void rd(int &x){
char ch;x=0;bool fl=false;
while(!isdigit(ch=getchar()))(ch=='-')&&(fl=true);
for(x=numb;isdigit(ch=getchar());x=x*10+numb);
(fl==true)&&(x=-x);
}
namespace Miracle{
const int N=100000+5;
const int inf=0x3f3f3f3f;
struct node{
int pri;
int ch[2];
int val;
int sz;
}t[N];
int tot;
int rt;
int n;
int nc(int v){
t[++tot].val=v;t[tot].sz=1;
t[tot].pri=rand();
return tot;
}
void pushup(int x){
t[x].sz=t[t[x].ch[1]].sz+t[t[x].ch[0]].sz+1;
}
int merge(int x,int y){
if(!x||!y) return x+y;
if(t[x].pri<t[y].pri){
t[x].ch[1]=merge(t[x].ch[1],y);
pushup(x);
return x;
}else{
t[y].ch[0]=merge(x,t[y].ch[0]);
pushup(y);
return y;
}
}
void split(int now,int k,int &x,int &y){
if(!now){
x=0;y=0;return;
}
if(t[now].val<=k){
x=now;
split(t[now].ch[1],k,t[now].ch[1],y);
}else{
y=now;
split(t[now].ch[0],k,x,t[now].ch[0]);
}
pushup(now);
}
int kth(int k){
int x=rt;
while(1){
if(t[t[x].ch[0]].sz+1==k) return x;
int tmp=t[t[x].ch[0]].sz+1;
if(tmp<k){
k-=tmp;x=t[x].ch[1];
}else{
x=t[x].ch[0];
}
}
}
int main(){
srand(19260817);
rd(n);
int op,x;
int le=0,ri=0;
while(n--){
rd(op);rd(x);
switch (op){
case 1:{
split(rt,x,le,ri);
rt=merge(merge(le,nc(x)),ri);
break;
}
case 2:{
int zz;
split(rt,x,le,zz);
split(le,x-1,le,ri);
//le=t[le].ch[0];//warning!!! maybe wrong
ri=merge(t[le].ch[0],t[le].ch[1]);
rt=merge(merge(le,),ri);
break;
}
case 3:{
split(rt,x-1,le,ri);
printf("%d\n",t[le].sz+1);
rt=merge(le,ri);
break;
}
case 4:{
int tmp=kth(x);
printf("%d\n",t[tmp].val);
break;
}
case 5:{
split(rt,x-1,le,ri);
printf("%d\n",t[le].val);
rt=merge(le,ri);
break;
}
case 6:{
split(rt,x,le,ri);
printf("%d\n",t[ri].val);
rt=merge(le,ri);
break;
}
}
}
return 0;
}
}
signed main(){
Miracle::main();
return 0;
}
/*
Author: *Miracle*
Date: 2019/1/5 21:36:18
*/
fhq
猜你喜欢
转载自www.cnblogs.com/Miracevin/p/10226576.html
今日推荐
周排行