BZOJ3224 Tyvj 1728 普通平衡树
就是裸的平衡树的说= =
怎么就是做不出呢。。。
直接写Treap好了,反正Splay至今不会233
1 /************************************************************** 2 Problem: 3224 3 User: rausen 4 Language: C++ 5 Result: Accepted 6 Time:212 ms 7 Memory:4032 kb 8 ****************************************************************/ 9 10 #include <cstdio> 11 #include <cstdlib> 12 #include <ctime> 13 14 #define lson tr[r].l 15 #define rson tr[r].r 16 using namespace std; 17 const int N = 100001; 18 const int Maxlen = 900005; 19 20 struct treap_node { 21 int l, r, v, sz, key, cnt; 22 }tr[N]; 23 24 int n, cnt, root, ans, x; 25 char buf[Maxlen]; 26 int Left, Len; 27 28 inline int read() { 29 int x = 0, sgn = 1; 30 while (buf[Left] < '0' || '9' < buf[Left]) 31 if (buf[Left++] == '-') sgn = -1; 32 while ('0' <= buf[Left] && buf[Left] <= '9') 33 x = x * 10 + buf[Left++] - '0'; 34 return sgn * x; 35 } 36 37 int len = 0, pr[15]; 38 inline void print(int x) { 39 if (x < 0) putchar('-'), x = -x; 40 while (x) 41 pr[++len] = x % 10, x /= 10; 42 if (!len) putchar('0'); 43 while (len) 44 putchar(pr[len--] + '0'); 45 puts(""); 46 } 47 48 49 inline void update(int r) { 50 tr[r].sz = tr[lson].sz + tr[rson].sz + tr[r].cnt; 51 } 52 53 inline void rturn(int &r) { 54 int t = lson; 55 lson = tr[t].r; 56 tr[t].r = r, tr[t].sz = tr[r].sz; 57 update(r); 58 r = t; 59 } 60 61 inline void lturn(int &r) { 62 int t = rson; 63 rson = tr[t].l; 64 tr[t].l = r, tr[t].sz = tr[r].sz; 65 update(r); 66 r = t; 67 } 68 69 void ins(int &r) { 70 if (r == 0) { 71 r = ++cnt; 72 tr[r].sz = tr[r].cnt = 1; 73 tr[r].v = x; 74 tr[r].key = rand(); 75 return; 76 } 77 ++tr[r].sz; 78 if (tr[r].v == x) 79 ++tr[r].cnt; 80 else if (x > tr[r].v) { 81 ins(rson); 82 if (tr[rson].key < tr[r].key) 83 lturn(r); 84 } else { 85 ins(lson); 86 if (tr[lson].key < tr[r].key) 87 rturn(r); 88 } 89 } 90 91 void del(int &r) { 92 if (r == 0) return; 93 if (tr[r].v == x) { 94 if (tr[r].cnt > 1) { 95 --tr[r].cnt, --tr[r].sz; 96 return; 97 } 98 if (!lson || !rson) 99 r = lson + rson; 100 else if (tr[lson].key < tr[rson].key) 101 rturn(r), del(r); 102 else lturn(r), del(r); 103 } 104 else if (x > tr[r].v) --tr[r].sz, del(rson); 105 else --tr[r].sz, del(lson); 106 } 107 108 int query_rank(int r) { 109 if (r == 0) return 0; 110 if (tr[r].v == x) 111 return tr[lson].sz + 1; 112 else if (x > tr[r].v) 113 return tr[lson].sz + tr[r].cnt + query_rank(rson); 114 return query_rank(lson); 115 } 116 117 int query_kth (int r, int x) { 118 if (r == 0) return 0; 119 if (x <= tr[lson].sz) return query_kth(lson, x); 120 else if (x > tr[lson].sz + tr[r].cnt) 121 return query_kth(rson, x - tr[lson].sz - tr[r].cnt); 122 else return tr[r].v; 123 } 124 125 void query_pre(int r) { 126 if (r == 0) return; 127 if (tr[r].v < x) { 128 ans = r; 129 query_pre(rson); 130 } else query_pre(lson); 131 } 132 133 void query_next(int r) { 134 if (r == 0) return; 135 if (tr[r].v > x) { 136 ans = r; 137 query_next(lson); 138 } else query_next(rson); 139 } 140 141 int main() { 142 int i, oper; 143 Len = fread(buf, 1, Maxlen, stdin); 144 buf[Len] = ' '; 145 n = read(); 146 for (i = 1; i <= n; ++i) { 147 oper = read(), x = read(); 148 if (oper == 1) 149 ins(root); else 150 if (oper == 2) 151 del(root); else 152 if (oper == 3) 153 print(query_rank(root)); else 154 if (oper == 4) 155 print(query_kth(root, x)); else 156 if (oper == 5) { 157 ans = 0, query_pre(root); 158 print(tr[ans].v); 159 } else 160 if (oper == 6) { 161 ans = 0, query_next(root); 162 print(tr[ans].v); 163 } 164 } 165 return 0; 166 }
View Code
转载于:https://www.cnblogs.com/rausen/p/4113933.html
BZOJ3224 Tyvj 1728 普通平衡树相关推荐
- bzoj3224: Tyvj 1728 普通平衡树(splay)
3224: Tyvj 1728 普通平衡树 题目:传送门 题解: 啦啦啦啦又来敲个模版水经验啦~ 代码: 1 #include<cstdio> 2 #include<cstring& ...
- bzoj3224 Tyvj 1728 普通平衡树题解--Treap
题面: Description您需要写一种数据结构(可参考题目标题),来维护一些数,其中需要提供以下操作: 1. 插入x数 2. 删除x数(若有多个相同的数,因只删除一个) 3. 查询x数的排名(若有 ...
- bzoj3224: Tyvj 1728 普通平衡树(打个splay暖暖手)
(其实今天好热啊? 题目大意:插入,删除,k小,前驱后继,数的排名. splay和treap裸题...过几天补个treap的 splay: #include<iostream> #incl ...
- 替罪羊树—BZOJ3224: Tyvj 1728 普通平衡树
冬令营被平衡树坑了之后,打算苦练一番数据结构(QAQ). 先是打了一下想学好久的替罪羊树. 替罪羊树实现方法很简单,就是在不满足平衡条件的时候暴力重构子树. 调试小结: 1.删除操作分两类情况:如果某 ...
- BZOJ 3224: Tyvj 1728 普通平衡树 treap
3224: Tyvj 1728 普通平衡树 Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnline/p ...
- BZOJ 3224: Tyvj 1728 普通平衡树【Treap】
3224: Tyvj 1728 普通平衡树 Time Limit: 10 Sec Memory Limit: 128 MB Description 您需要写一种数据结构(可参考题目标题),来维护一些数 ...
- BZOJ 3224: Tyvj 1728 普通平衡树
3224: Tyvj 1728 普通平衡树 Time Limit: 10 Sec Memory Limit: 128 MB Submit: 9629 Solved: 4091 [Submit][S ...
- 3224: Tyvj 1728 普通平衡树
3224: Tyvj 1728 普通平衡树 Time Limit: 10 Sec Memory Limit: 128 MB Submit: 14480 Solved: 6275 Descripti ...
- Treap树堆(bzoj 3224: Tyvj 1728 普通平衡树)
Treap树堆:一种排序二叉树(中序遍历权值有序) 每个节点有两个关键字:key[]和rand[] 其中key[]满足二叉搜索树性质,rand[]满足堆性质(即Tree+Heap=Treap)即 如果 ...
- 【BZOJ】3224: Tyvj 1728 普通平衡树
[题意] 1. 插入x数 2. 删除x数(若有多个相同的数,因只删除一个) 3. 查询x数的排名(若有多个相同的数,因输出最小的排名) 4. 查询排名为x的数 5. 求x的前驱(前驱定义为小于x,且最 ...
最新文章
- oracle添加新字段sql,oracle 构造添加字段的SQL语句
- PAT (Advanced Level) 1140~1143:1140模拟 1141模拟 1142暴力 1143 BST+LCA
- ai驱动数据安全治理_JupyterLab中的AI驱动的代码完成
- 1-4dockerfile基本使用
- 关于lock_guard使用细节
- 把庞大的 npm script 拆到单独文件中
- netty keepalive 和 idle 的关系
- Git是目前世界上最先进的分布式版本控制系统(没有之一)。
- JS 逻辑中断(一)
- exchange无法收发邮件_【知乎最详细】Windows邮件amp;日历UWP+QQ邮箱如何设置
- 如何过滤freebayes得到原始vcf文件
- 中国大学MOOC伦理学题库及答案
- h3c trunk口改access_关于h3c的trunk模式
- 单片机基础知识点 01
- tensorflow2实现vnet
- CentOS历史版本下载
- vue自动计算日期天数
- CSS3基础(4)——CSS3 渲染属性
- Mirror for Samsung TV for mac(三星智能电视投屏软件)
- Android CardView使用详解
热门文章
- 配置中心Nacos与Apollo比较
- android修改对话框大小设置,android – 如何更改对话框首选项消息的文本大小?...
- Java I/O系统之转换流
- 【渝粤教育】国家开放大学2018年春季 0408-22T管理学基础 参考试题
- 高精度运算一(两个数的运算)
- cublas中执行矩阵乘法运算的函数 首先要注意的是cublas使用的是以列为主的存储方式,和c/c++中的以行为主的方式是不一样的。处理方法可参考下面的注释代码
- jq22扒的网站, 左右箭头图标问题
- .net remoting 使用事件
- 自动生成构造方法、getter、setter
- P3512 [POI2010]PIL-Pilots