博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
hdu 4006 The kth great number SBT
阅读量:5925 次
发布时间:2019-06-19

本文共 2224 字,大约阅读时间需要 7 分钟。

直接用SBT中的get_max_Kth函数

#include 
#include
#include
#include
using namespace std;#define LL long longconst int maxn = 100010;#define ls T[x].l#define rs T[x].r#define lls T[ls].l#define lrs T[ls].r#define rls T[rs].l#define rrs T[rs].rstruct SBT{ //左子树指针,右子树指针,大小,键值 int l,r,sz,key; void init(){ l=r=key=0; sz=1; }}T[maxn];int root,tot; //根的位置以及节点个数//左旋转处理void l_rot(int &x){ int k=rs; rs=T[k].l; T[k].l=x; T[k].sz=T[x].sz; T[x].sz=T[ls].sz+T[rs].sz+1; x=k;}//右旋转处理void r_rot(int &x){ int k=ls; ls=T[k].r; T[k].r=x; T[k].sz=T[x].sz; T[x].sz=T[ls].sz+T[rs].sz+1; x=k;}//调整处理void maintain(int &x,bool flag){ if(flag){ //更新右子树 if(T[rrs].sz>T[ls].sz) l_rot(x); else if(T[rls].sz>T[ls].sz){ r_rot(rs); l_rot(x); } else return; } else{ //更新在左子树 if(T[lls].sz>T[rs].sz) r_rot(x); else if(T[lrs].sz>T[rs].sz){ l_rot(ls); r_rot(x); } else return; } //更新子树,然后再更新根,直到平衡为止 maintain(ls,false); maintain(rs,true); maintain(x,false); maintain(x,true);}//插入新节点void insert(int &r,LL k){ if(r==0){ r=++tot; T[r].init(); T[r].key=k; } else{ T[r].sz++; if(k
=T[r].key); }}//删除结点,利用的是前驱替换int remove(int &r,int k){ int d_key; if(!r) return 0; T[r].sz--; //前者说明就是要删的节点,后两者说明不存在此节点 if(T[r].key==k||(T[r].l==0&&k
T[r].key)){ d_key=T[r].key; if(T[r].l&&T[r].r) T[r].key=remove(T[r].l,k+1); else r=T[r].l+T[r].r; return d_key; } else return remove(k
T[x].key) return get_pre(rs,x,k); else return get_pre(ls,y,k);}int get_next(int &x,int y,int k) { if(x == 0) return y; if(k < T[x].key) return get_next(ls,x,k); else return get_next(rs,y,k);}//取得第K大的数int get_max_Kth(int &x,int k){ int t=T[rs].sz+1; if(t==k) return T[x].key; if(t
T[x].key) return get_rank(rs,k)+T[ls].sz+1; else return T[ls].sz+1;}//排序void inorder(int &x) { if(x == 0) return; inorder(ls); printf("%d\n",T[x].key); inorder(rs);}int n , k; char ch[11]; int p;int main() { while(~scanf("%d%d",&n,&k)) { root = tot = 0; while(n--) { scanf("%s" , ch); if(ch[0] == 'I') { scanf("%d" , &p); insert(root , p); } else { int ans = get_max_Kth(root,k); printf("%d\n" , ans); } } } return 0;}

  

转载于:https://www.cnblogs.com/tobec/p/3239485.html

你可能感兴趣的文章
Google的Shell开发规范
查看>>
【云吞铺子之专家来了】RDS for MySQL 表上 Metadata lock 的产生和处理
查看>>
站长dedecms网站被挂马清理过程与分析解决
查看>>
6月5日云栖精选夜读丨为爱“+”持,萌化了!公益二代C位出道造型,你们pick哪个?...
查看>>
4道html笔试小题
查看>>
Chrome 将警告用户不再支持 Flash Player
查看>>
波士顿动力改做轮式机器人:是形势所迫也早有征兆,但并不平坦
查看>>
安森美半导体和Hexius半导体扩展 下一代混合信号ASIC的模拟功能
查看>>
Veeam产品战略副总裁兼首席宣传大使Doug Hazelman通过回顾过去十年的变化,预测未来十年的科技世界将会如何发展...
查看>>
ODCC开放数据中心峰会即将召开 十道“技术大餐”提前揭秘
查看>>
Jerry眼中的SAP客户数据模型
查看>>
FBS2017独家观察:食品饮料CIO的心声 你听到了吗?
查看>>
阿里云如何打破Oracle迁移上云的壁垒
查看>>
好好的机器人,怎么就暴走了?
查看>>
日本研发双足行走机器人,奔跑速度堪比一流马拉松选手
查看>>
复杂性思维中文第二版 十一、进化
查看>>
SQL Server数据同步的研究(单向/双向)
查看>>
阿里健康宣布 106 亿港元收购天猫医疗器械、保健用品等业务
查看>>
不同的应用场景AGV导航方式分析
查看>>
JDK居然还有Server和Client模式
查看>>