hdu1908
2016-04-13 20:02
375 查看
http://acm.hdu.edu.cn/showproblem.php?pid=1908
利用二叉树的堆性质
利用二叉树的堆性质
#include <iostream> #include <algorithm> #include <cstdio> #include <cstring> using namespace std; struct node { int l,r,v,pro; int rnd; }tr[1000005]; int size,root,ans; void rturn(int &k) { int t=tr[k].l; tr[k].l=tr[t].r; tr[t].r=k; k=t; } void lturn(int &k) { int t=tr[k].r; tr[k].r=tr[t].l; tr[t].l=k; k=t; } void insert(int &k,int x,int y) { if(k==0) { size++; k=size; tr[k].v=x; tr[k].pro=y; tr[k].rnd=rand(); return; } if(x>tr[k].v) { insert(tr[k].r,x,y); if(tr[tr[k].r].rnd<tr[k].rnd) lturn(k);//把他转到左边 } else { insert(tr[k].l,x,y); if(tr[tr[k].l].rnd<tr[k].rnd) rturn(k); } } void search_min(int &k)//最小值一定在最左的节点上; { if(tr[k].l==0) { ans=tr[k].pro; k=tr[k].r; return ; } search_min(tr[k].l); } void search_max(int &k)//最大值一定在最右的节点上; { if(tr[k].r==0) { ans=tr[k].pro; k=tr[k].l; return ; } search_max(tr[k].r); } int main() { int x,num,y; while(scanf("%d",&x)!=EOF&&x) { ans=0; if(x==1) { scanf("%d%d",&num,&y); insert(root,y,num); } else if(x==2) { if(root) search_max(root); printf("%d\n",ans); } else if(x==3) { if(root) search_min(root); printf("%d\n",ans); } } return 0; }
相关文章推荐
- JSP的CSS背景样式写法
- 程序猿二三事之工具使用-Eclipse常用快捷键
- Android UI-实现底部切换标签(fragment)
- visual studio 2013和sql server数据库连接
- 关于开发新一代大数据分布式关系数据库的倡议
- 栈的应用 逆波兰式
- C++游戏系列5:不止有一件武器
- hibernate分页查询和方言
- Leetcode no.33
- 菜鸟学python(10) 用python处理Layer导出的域名(将每个域名前加入http://)
- SQL优化的部分内容
- jquery请求servlet实现ajax异步请求
- 最大连续子序列和 HDU 1231 (时间复杂度为O(n))
- 【UFLDL-exercise9-Convolution and Pooling】
- struts2中result跳转jsp时路径问题
- ios可变数组NSMutableArray和不可变数组NSArray的区别
- 【BZOJ3407】[Usaco2009 Oct]Bessie's Weight Problem 贝茜的体重问题【01背包】
- 深入理解Android中的View
- storm源码之理解Storm中Worker、Executor、Task关系
- Hibernate与 MyBatis的比较