HDU 4006 求第k大数 treap
来源:互联网 发布:明解c语言入门篇 编辑:程序博客网 时间:2024/06/14 13:21
裸题,瞬秒。。
#include <stdio.h>#include <iostream>#include <algorithm>#include <math.h>#include <vector>#include <set>#include <map>#include <queue>using namespace std;#define L(id) tree[id].ch[0]#define R(id) tree[id].ch[1]#define Size(id) tree[id].size#define Father(id) tree[id].fa#define Val(id) tree[id].val#define ll intll Mid(ll x,ll y){return (x+y)>>1;}#define N 30100ll a[N], n;int ch[N][2],val[N],counts[N],r[N],size[N],tot,root;int Newnode(int &rt,int v){rt=++tot;val[rt]=v;ch[rt][0]=ch[rt][1]=0;counts[rt]=size[rt]=1;r[rt]=rand();return rt;}inline void PushUp(int rt){size[rt]=size[ch[rt][0]]+size[ch[rt][1]]+counts[rt];}void Rotate(int &x,int kind){int y=ch[x][kind^1];ch[x][kind^1]=ch[y][kind];ch[y][kind]=x;PushUp(x);PushUp(y);x=y;}int Insert(int &rt,int v){if(rt==0)return Newnode(rt,v);int ans;if(v==val[rt]) counts[rt]++, ans = rt;else{int kind=(v>val[rt]);ans = Insert(ch[rt][kind],v);if(r[ch[rt][kind]]<r[rt])Rotate(rt,kind^1);}PushUp(rt);return ans;}int select(int rt,int k){if(size[ch[rt][0]]>=k) return select(ch[rt][0],k);if(size[ch[rt][0]]+counts[rt]>=k) return val[rt];return select(ch[rt][1],k-size[ch[rt][0]]-counts[rt]);}void remove(int &rt,int v){if(val[rt]==v){if(counts[rt]>1)counts[rt]--;else if(!ch[rt][0]&&!ch[rt][1]){rt=0;return ;}else{int kind=r[ch[rt][0]]<r[ch[rt][1]];Rotate(rt,kind);remove(rt,v);}}else remove(ch[rt][v>val[rt]],v);PushUp(rt);}void Init(){ch[0][0]=ch[0][1]=0;size[0]=counts[0]=val[0]=0;tot=root=0;r[0]=(1LL<<31)-1;Newnode(root,2000000001);}int q[N];char s[2];int main(){int que, i, j, k, l, r;while(~scanf("%d %d",&n,&que)){Init();while(n--){scanf("%s",s);if(s[0]=='I')scanf("%d",&l),Insert(root,-l);else printf("%d\n",-select(root,que));}}return 0;}
0 0
- HDU 4006 求第k大数 treap
- POJ 2761(Treap离线求区间第k大数)
- poj 1442 Black Boxes(treap)求第k大数的treap模板
- HDU 4006 The kth great number (求动态第k大值【Treap】)
- 求第k大数
- 求第k大数
- 求第k大数
- 求第k大数
- poj 2985 The k-th Largest Group 求第K大数 Treap, Binary Index Tree, Segment Tree
- [HDU3292] 求第K大数
- HDU 4006 The kth great number 【优先队列求第K大数】
- 随机伪快排法 求第k大数
- 求数组中第K大数
- 使用STL求第K大数
- N个数,求第K大数
- 求数组的第k大数
- BFPRT算法求第k大数
- 求序列第K大数 POJ2104
- 教育那些事
- 坐标转换之七参数
- Python基础编程(六)抽象
- 界面测试
- python基础教程_学习笔记4:元组
- HDU 4006 求第k大数 treap
- 网站首页的注意事项
- 港媒:习近平的足球外交
- 正则表达式的快速学习方法,javascript正则表达式,PHP正则表达式
- Oracle表分区
- Android JNI学习之javah命令的正确使用(找了好半天才找到的,汉,网上好多说法都没用)
- web.xml中classpath的含义
- Scrapy pipeline spider_opened and spider_closed not being called
- ajax 重定向 302