POJ 1442 Black Box(Treap)
来源:互联网 发布:中国煤炭资源 知乎 编辑:程序博客网 时间:2024/06/04 18:32
题意:有一些操作,第一种是向集合中添加一个数字,另一种是查找集合中第k大的数字是多少。
思路:用Treap直接搞就行了,可以用来练练手……
代码:
#include <iostream>#include<cstdio>#include<cstring>#include<string>#include<algorithm>#include<map>#include<queue>#include<stack>#include<cmath>#include<vector>#define inf 0x3f3f3f3f#define Inf 0x3FFFFFFFFFFFFFFFLL#define eps 1e-9#define pi acos(-1.0)using namespace std;typedef long long ll;const int maxn=30000+1000;int ch[maxn][2],val[maxn],counts[maxn],r[maxn],size[maxn],tot,root;void 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();}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;}void Insert(int &rt,int v){ if(rt==0) { Newnode(rt,v); return ; } if(v==val[rt]) counts[rt]++; else { int kind=(v>val[rt]); Insert(ch[rt][kind],v); if(r[ch[rt][kind]]<r[rt]) Rotate(rt,kind^1); } PushUp(rt);}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 Init(){ ch[0][0]=ch[0][1]=0; size[0]=counts[0]=val[0]=0; tot=root=0; Newnode(root,2000000001);}int num[maxn],query[maxn];int main(){ //freopen("in.txt","r",stdin); //freopen("out.txt","w",stdout); int m,n; while(~scanf("%d%d",&m,&n)) { for(int i=0;i<m;++i) scanf("%d",&num[i]); for(int i=0;i<n;++i) scanf("%d",&query[i]); Init(); int s=0,cnt=0; for(int i=0;i<m;++i) { Insert(root,num[i]); if(s>=n) break; while(size[root]-1==query[s]) { printf("%d\n",select(root,++cnt)); s++; } } } return 0;}
0 0
- POJ 1442 Black Box(Treap)
- POJ 1442 Black Box ( Treap )
- POJ 1442 Black Box(Treap)
- POJ 1442 Black Box [treap]
- POJ 1442 Black Box(treap)
- POJ 1442 Black Box [Treap]
- POJ 1442 Black Box Treap
- poj 1442 Black Box(Treap)
- POJ 1442 Black Box (Treap)
- [Treap] poj 1442 Black Box
- POJ 1442 Black Box(堆||treap)
- POJ 1442Black Box【treap模板】
- POJ 1442 Black Box(treap树)
- POJ 1442 Black Box Treap 模板题
- POJ-1442 Black Box,treap名次树!
- 【POJ 1442】Black Box (treap树)
- poj 1442 Black box (Treap过~)
- 【POJ】1442 Black Box 静态第k大,treap
- <%@ Page%> page指令属性
- int *ptr1=(int *)(&a+1)数组指针
- 学习Linux二(创建、删除文件和文件夹命令)
- Confluence 页面属性(Page Properties)宏
- feof()和EOF的用法—— C中文件结尾的判断
- POJ 1442 Black Box(Treap)
- 【开发工具】四、Apache Subversion
- fedora9只能进入黑客帝国(字符命令行)模式和黑屏问题解决方案
- JS内存泄漏排查方法(Chrome Profiles)
- 二叉树的深度优先dfs遍历(前序、中序和后序;递归与非递归)
- Android 4.4 Kitkat Phone工作流程浅析(二)__UI结构分析
- 股票F10关键字过滤工具
- Android WebApp 開發教學 (3) – HTML5 + PhoneGap = 如虎添翼
- 汽车安全驾驶 如何判断车轮位置