【模板】Splay二叉树排序
来源:互联网 发布:sim900a gprs接收数据 编辑:程序博客网 时间:2024/06/08 19:33
题目描述
排序(二叉树排序)
输入输出格式
输入格式:n个数,和一个无序序列。
输出格式:输出一行n个数字,表示原始序列排序后的结果
输入输出样例
输入样例#1:
5 3 5 2 1 4
输出样例#1:
1 2 3 4 5
说明
N,M<=100000
#include <iostream>#include <cstdio>using namespace std;struct splay_tree{int val,lef,rig,p;}a[1000000];int n,x,root=0,size=1;void left_rotate(int x){int y=a[x].p;a[x].p=a[y].p;if (a[x].p==0) root=x;if (y==a[a[y].p].lef) a[a[y].p].lef=x; else a[a[y].p].rig=x;a[y].rig=a[x].lef;a[a[x].lef].p=y;a[y].p=x;a[x].lef=y;}void right_rotate(int x){int y=a[x].p;a[x].p=a[y].p;if (a[x].p==0) root=x;if (y==a[a[y].p].lef) a[a[y].p].lef=x; else a[a[y].p].rig=x;a[y].lef=a[x].rig;a[a[x].rig].p=y;a[y].p=x;a[x].rig=y;}void splay(int x){while (x!=root) {int y=a[x].p;if (y==root&&x==a[y].lef){right_rotate(x);break;}elseif (y==root&&x==a[y].rig){left_rotate(x);break;}else{if (y==a[a[y].p].lef){ if (x==a[y].rig) {left_rotate(x);right_rotate(x);}if (x==a[y].lef) {right_rotate(y);right_rotate(x);}}elseif (y==a[a[y].p].rig){ if (x==a[y].lef) { right_rotate(x);left_rotate(x);}if (x==a[y].rig) {left_rotate(y);left_rotate(x);}}}}}void st_insert(int va){int p=root,last=p;if (p==0){root=1;a[1].val=va;return ;}while (a[p].val!=0){last=p;if (a[p].val>va) p=a[p].lef; else p=a[p].rig;}++size;a[size].val=va;a[size].p=last;if (a[last].val>va) a[last].lef=size; else a[last].rig=size; splay(size);}void dfs(int x){if (x==0) return ;dfs(a[x].lef);cout <<a[x].val<<' ';dfs(a[x].rig);}int main(){scanf("%d",&n);int flag;for (int i=1;i<=n;++i){scanf("%d",&x);st_insert(x);}dfs(root);return 0;}
阅读全文
1 0
- 【模板】Splay二叉树排序
- Splay伸展树&模板
- 伸展树(splay)模板
- 【模板Splay】XX树
- Splay树模板
- splay树模板
- Splay伸展树模板总结
- treap 排序二叉树的模板
- SPLAY模板
- (模板)splay
- splay模板
- splay 模板
- splay 模板
- 【模板】splay
- splay模板
- splay模板
- Splay模板
- Splay模板
- bootstrap固定table表头
- 数据科学:以信息为载体的精确体系
- 语义分割-- SegNet:A Deep Convolutional Encoder-Decoder Architecture for Image Segmentation
- jsp与servlet传值区别
- java 基于servlet+maven+mybatis+websocket聊天,包括单聊和群聊
- 【模板】Splay二叉树排序
- CefSharp使用教程三(Cookie处理)
- Java 将Long转换成Double类型 获取明年1月份和下个月的年月的形式
- intent详解
- Android 开发:由模块化到组件化(一)
- 功能: winform的enter键跳转功能 (学习日记 2017-05-26)
- react-native-scrollable-tab-view详解
- 3分钟读懂互联网金融风控的应用场景及风控手段
- QCustomPlot的使用方法