TREAP示例代码(排序)
来源:互联网 发布:智能电视直播软件2017 编辑:程序博客网 时间:2024/06/12 19:02
#include<iostream>#include<cstdio>#include<cstdlib>using namespace std;struct node{int v,w;node *f,*l,*r;node(){v=0;w=rand();f=l=r=NULL;}};node *root;void zig(node *h,node *p){node *t=h->f;h->l=p->r;if(p->r)p->r->f=h;p->r=h;h->f=p;if(t){if(h==t->l)t->l=p;else t->r=p;}else root=p;p->f=t;}void zag(node *h,node *p){node *t=h->f;h->r=p->l;if(p->l)p->l->f=h;p->l=h;h->f=p;if(t){if(h==t->l)t->l=p;else t->r=p;}else root=p;p->f=t;}void insert(node *h,node *p){if(p->v>h->v){if(h->r==NULL){h->r=p;p->f=h;while(p->f!=NULL && p->w<p->f->w){if(p==p->f->l)zig(p->f,p);else zag(p->f,p);}}else insert(h->r,p);}else{if(h->l==NULL){h->l=p;p->f=h;while(p->f!=NULL && p->w<p->f->w){if(p==p->f->l)zig(p->f,p);else zag(p->f,p);}}else insert(h->l,p);}}void read(int &x){x=0;char c=getchar();while(c<'0' || c>'9')c=getchar();while(c>='0' && c<='9'){x=x*10+c-'0';c=getchar();}}void out(node *h){if(h){out(h->l);printf("%d ",h->v);out(h->r);}}int main(){int i,j,k,m,n;node *p;srand(34234);cin>>n;cin>>k;root=new node;root->v=k;for(i=2;i<=n;i++){read(k);p=new node;p->v=k;insert(root,p);}out(root);return 0;}
阅读全文
0 0
- TREAP示例代码(排序)
- Treap树(代码)
- 插入排序代码示例
- python快速排序代码示例!
- 冒泡排序--Java代码示例
- 利用Treap排序
- TREAP平衡树代码
- 排序二叉树和treap
- BST && TREAP 实现简单排序
- 超强的分页查询、排序示例代码
- 可持久化Treap(范浩强Treap)
- 排序算法之插入排序详解(附示例代码)
- 排序算法之快速排序详解(附示例代码)
- treap(poj2352)
- Treap(树堆)
- bzoj1503(treap)
- bzoj3224(treap)
- 【模板】treap(数组)
- C++从零实现BP神经网络
- MySQL高级查询---连接查询实例
- [bzoj4553][Tjoi2016&Heoi2016]序列 cdq分治
- java 基础知识2 --数组
- Glide加载图片的简单实用
- TREAP示例代码(排序)
- 遗传算法(一)
- AD转换控制直流电机转速
- javax.mail.AuthenticationFailedException
- 傅盛认知三部曲后记:到底什么是认知?
- 已有一个名为“frmadd”的组件。组件的名称必须是唯一的,而且名称必须不区分大小
- Zookeeper实例原生API--删除节点
- 自定义属性
- 70. Climbing Stairs