FHQ,下了数据点人肉评测是对的,但就是过不去
查看原帖
FHQ,下了数据点人肉评测是对的,但就是过不去
150611
mrozhx楼主2020/11/28 11:21

我#2~#17都是WA,#2下了测试点人肉对拍是对的,要是我眼瞎的话骂轻点吧QAQ

#2.in

20
1 964673
5 968705
4 1
3 964673
5 965257
1 915269
1 53283
3 964673
3 53283
3 53283
1 162641
5 973984
1 948119
2 915269
2 53283
6 959161
1 531821
1 967521
2 531821
1 343410

#2.out

964673
964673
1
964673
3
1
1
964673
964673

code

#include<bits/stdc++.h>
using namespace std;
struct Tree{
	int l,r,val,key,size;
}a[100001];
int n,kind,x,top=0,root=0,Lroot,Mroot,Rroot;
void adde(int now){
	a[++top].val=now;
	a[top].key=rand();
	a[top].l=a[top].r=0;
	return;
}
void update(int now){
	a[now].size=a[a[now].l].size+a[a[now].r].size+1;
}
void split(int now,int k,int &l,int &r){
	if(!now){
		l=r=0;
		return;
	}
	if(a[now].val<=k){
		l=now;
		split(a[now].r,k,a[now].r,r);
	}
	else{
		r=now;
		split(a[now].l,k,l,a[now].l);
	}
	update(now);
}
int merge(int l,int r){
	if(!l||!r) return l+r;
	if(a[l].key<=a[r].key){
		a[l].r=merge(a[l].r,r);
		update(l);
		return l;
	}
	else{
		a[r].l=merge(l,a[r].l);
		update(r);
		return r;
	}
}
int kth(int now,int x){
	if(a[a[now].l].size==x-1){
		return now;
	}
	if(a[a[now].l].size>=x){
		return kth(a[now].l,x);
	}
	else{
		return kth(a[now].r,x-a[a[now].l].size-1);
	}
}
int main(){
//	freopen("P3369_2.in.txt","r",stdin);
//	freopen("out.txt","w",stdout);
	scanf("%d",&n);
	while(n--){
		scanf("%d%d",&kind,&x);
		if(kind==1){
			split(root,x,Lroot,Rroot);
			adde(x);
			root=merge(merge(Lroot,top),Rroot);
		}
		if(kind==2){
			split(root,x,Lroot,Rroot);
			split(Lroot,x-1,Lroot,Mroot);
			Mroot=merge(a[Mroot].l,a[Mroot].r);
			root=merge(merge(Lroot,Mroot),Rroot);
		}
		if(kind==3){
			split(root,x-1,Lroot,Rroot);
			printf("%d\n",a[Lroot].size+1);
			root=merge(Lroot,Rroot);
		}
		if(kind==4){
			printf("%d\n",a[kth(root,x)].val);
		}
		if(kind==5){
			split(root,x-1,Lroot,Rroot);
			printf("%d\n",a[kth(Lroot,a[Lroot].size)].val);
			root=merge(Lroot,Rroot);
		}
		if(kind==6){
			split(root,x,Lroot,Rroot);
			printf("%d\n",a[kth(Rroot,1)].val);
			root=merge(Lroot,Rroot);
		}
	}
	return 0;
}
2020/11/28 11:21
加载中...