记录编号 338042 评测结果 AAAATAAAAT
题目名称 [HZOI 2016] 简单的Treap 最终得分 80
用户昵称 GravatarNewBee 是否通过 未通过
代码语言 C++ 运行时间 7.247 s
提交时间 2016-11-05 07:22:59 内存使用 7.13 MiB
显示代码纯文本
#include<cstdio>
#include<cstdlib>
#define Cu fclose(stdin);fclose(stdout);return 0;
#define Begin freopen("treap.in","r",stdin);freopen("treap.out","w",stdout);chul();Cu
using namespace std;
const int maxn=500010;
struct op{
	int key,fre,ls,rs;
}r[maxn];
int righ(int rt){
	int rx=rt;
	rt=r[rt].rs;
	r[rx].rs=r[rt].ls;
	r[rt].ls=rx;
	return rt;
}
int left(int rt){
	int rx=rt;
	rt=r[rt].ls;
	r[rx].ls=r[rt].rs;
	r[rt].rs=rx;
	return rt;
}
int merge(int rt,int x){
	if(r[x].key<r[rt].key){
		if(!r[rt].ls){
			r[rt].ls=x;
		}
		else{
			r[rt].ls=merge(r[rt].ls,x);
		}
		if(r[rt].fre>r[r[rt].ls].fre){
			rt=left(rt);
		}
	}
	else{
		if(!r[rt].rs){
			r[rt].rs=x;
		}
		else {
			r[rt].rs=merge(r[rt].rs,x);
		}
		if(r[rt].fre>r[r[rt].rs].fre){
			rt=righ(rt);
		}
	}	
	return rt;
}		
void dfs(int rt){
	printf("%d ",r[rt].key);
	if(r[rt].ls){
		dfs(r[rt].ls);
	}
	if(r[rt].rs){
		dfs(r[rt].rs);
	}
}			 
void chul(){
	int n;
	scanf("%d",&n);
	for(int i=1;i<=n;i++){
		scanf("%d",&r[i].key);
	}
	for(int i=1;i<=n;i++){
		scanf("%d",&r[i].fre);
	}
	int rt=1;
	for(int i=2;i<=n;i++){
		rt=merge(rt,i);
	}
	dfs(rt);
}
int main(){
	int __size__=128<<20;
	char *__p__=(char*)malloc(__size__)+__size__;
	__asm__("movl %0, %%esp\n"::"r"(__p__));
	Begin;
}