[Treap] poj 1442 Black Box
来源:互联网 发布:喜剧片 知乎 编辑:程序博客网 时间:2024/06/07 10:52
题意
给出一个队列, 然后对于
思路
基本就是Treap的裸题,然后静态处理,因为
代码
依旧是谜一般的RE,去掉了srand就AC了……至今都不知道是为什么
#include <ctime>#include <cstdio>#include <cstdlib>#include <algorithm>using namespace std;struct Treap { struct Node { Node *ch[2]; int r; int v; int s; int cmp(int x) const { if(x == v) return -1; return x < v ? 0 : 1; } void maintain() { s = 1; if(ch[0] != NULL) { s += ch[0] -> s; } if(ch[1] != NULL) { s += ch[1] -> s; } } } *root; void init() { root = NULL;// srand(time(0)); } void rotate(Node* &o, int d) { Node* k = o -> ch[d ^ 1]; o -> ch[d ^ 1] = k -> ch[d]; k -> ch[d] = o; o -> maintain(); k -> maintain(); o = k; } void insert(Node* &o, int x) { if(o == NULL) { o = new Node(); o -> ch[0] = o -> ch[1] = NULL; o -> v = x; o -> r = rand(); } else { int d = (x v ? 0 : 1); insert(o -> ch[d], x); if(o -> ch[d] -> r > o -> r) { rotate(o, d ^ 1); } } o -> maintain(); } void remove(Node* &o, int x) { int d = o -> cmp(x); if(d == -1) { Node* u = o; if(o -> ch[0] != NULL && o -> ch[1] != NULL) { int d2 = (o -> ch[0] -> r > o -> ch[1] -> r ? 1 : 0); rotate(o, d2); remove(o -> ch[d2], x); } else { if(o -> ch[0] == NULL) { o = o -> ch[1]; } else { o = o -> ch[0]; } delete u; } } else { remove(o -> ch[d], x); } if(o != NULL) { o -> maintain(); } } int find(Node* o, int x) { while(o != NULL) { int d = o -> cmp(x); if(d == -1) return 1; else o = o -> ch[d]; } return 0; } int kth(Node* o, int k) { if(o == NULL || k > o -> s || k <= 0) { return -1; } int s = (o -> ch[0] == NULL ? 0 : o -> ch[0] -> s); if(k == s + 1) { return o -> v; } else { if(k <= s) { return kth(o -> ch[0], k); } else { return kth(o -> ch[1], k - s - 1); } } }} treap;const int MAXN = 100010;int a[MAXN];int main(void) { treap.init(); int n, m; scanf("%d%d", &n, &m); for(int i = 0; i < n; ++i) { scanf("%d", &a[i]); } int r = 0; for(int i = 1; i <= m; ++i) { int x; scanf("%d", &x); for(; r < x; ++r) { treap.insert(treap.root, a[r]); } printf("%d\n", treap.kth(treap.root, i)); } 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
- iOS尝试用测试驱动的方法开发一个列表模块【一】
- CAN总线U盘存储器 CAN总线U盘记录器
- Unity金字塔脚本
- 数串
- 持续集成--如何利用TravisCI持续集成自动测试GitHub项目
- [Treap] poj 1442 Black Box
- mac python学习开发简单入门
- C 存储类
- linux中的iscsi设备共享服务
- 创建基于悬停的弹出信息窗口
- win7 64位 anaconda4.4 安装tensorflow cpu
- JVM的client与server模式的区别
- HDU2222 Keywords Search (AC自动机)
- ACM训练日记—8月19日