您的位置:首页 > 其它

【bzoj2761】[JLOI2011]不重复数字

2014-03-25 20:21 363 查看
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cstdlib>
int n,t,root,size;
bool f;
struct data{
int l,r,v,rnd;
}tr[50001];
void lturn(int &k){
int t=tr[k].r;
tr[k].r=tr[t].l;
tr[t].l=k;
k=t;
}
void rturn(int &k){
int t=tr[k].l;
tr[k].l=tr[t].r;
tr[t].r=k;
k=t;
}
void insert(int &k,int x){
if(!k){
k=++size;
tr[k].v=x;
tr[k].rnd=rand();
return;
}
if(tr[k].v==x){
f=1;return;
}
else if(x<tr[k].v){
insert(tr[k].l,x);
if(tr[tr[k].l].rnd<tr[k].rnd)rturn(k);
}
else{
insert(tr[k].r,x);
if(tr[tr[k].r].rnd<tr[k].rnd)lturn(k);
}
}
int main(){
scanf("%d",&t);
while(t--){
memset(tr,0,sizeof(tr));
scanf("%d",&n);
root=size=f=0;
for(int i=1;i<=n;i++){
int x;scanf("%d",&x);f=0;
insert(root,x);
if(!f){
if(i==1)printf("%d",x);
else printf(" %d",x);
}
}
printf("\n");
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: