FHQTreap刷题记录
- 分裂:
如图,按值分裂,u比k大则切黄色的一,此时u接上Y的左子树,然后可见Y的左子树仍然空着,u也递归到其左子树。同理,u比k大则切红色的一,此时u接上X的右子树,然后可见X的右子树仍然空着,u也递归到其右子树。 - 合并:
随机切红色和紫色,合并的是切口上面部分,return合并后的根,,比如,如果切红色,那递归合并X的右子树和Y,并且X的右儿子的指针指向X的右子树和Y合并的结果。
BZOJ3224: Tyvj 1728 普通平衡树
- 模板题,代码:
1 #include <bits/stdc++.h>
2 #define nmax 100010
3
4 using namespace std;
5 int s[nmax][2]={0};
6 int si[nmax]={0}, v[nmax], r[nmax];
7 int cnt = 0;
8
9 void up(int p){
10 si[p] = si[ s[p][0] ] + si[ s[p][1] ] + 1;
11 }
12
13 void spilit(int& x, int& y, int k, int u){
14 if(!u) { x=y=0; return; }
15 if(v[u] <= k){
16 x = u;
17 spilit(s[x][1], y, k, s[x][1]);
18 }else{
19 y = u;
20 spilit(x, s[y][0], k, s[y][0]);
21 }
22 up(u);
23 }
24
25 int merge(int x, int y){
26 if(!x || !y){ return x|y; }
27 if(r[x] > r[y]) {
28 s[x][1] = merge(s[x][1], y);
29 up(x);
30 return x;
31 }else{
32 s[y][0] = merge(x, s[y][0]);
33 up(y);
34 return y;
35 }
36 }
37
38 int kth(int k, int u){
39 int ans, t;
40 while(1){
41 t = si[ s[u][0] ] + 1;
42 if(k == t) { ans = u; break; }
43 else if(k < t) u=s[u][0];
44 else { u=s[u][1]; k-=t; }
45 }
46 return v[ans];
47 }
48
49 int newnode(int k){
50 cnt++;
51 v[cnt] = k;
52 si[cnt] = 1;
53 r[cnt] = rand();
54 return cnt;
55 }
56
57 int main(){
58 int n, op, num;
59 cin >> n;
60 int x, y, z, root=0;
61 while(n--){
62 scanf("%d%d", &op, &num);
63 switch (op)
64 {
65 case 1:
66 z = newnode(num);
67 spilit(x, y, num, root);
68 root = merge( merge(x,z) , y );
69 break;
70 case 2:
71 spilit(x, y, num, root);
72 spilit(x, z, num-1, x);
73 z = merge(s[z][0], s[z][1]);
74 root = merge( merge(x,z), y );
75 break;
76 case 3:
77 spilit(x, y, num-1, root);
78 printf("%d\n", si[x]+1);
79 root = merge(x, y);
80 break;
81 case 4:
82 printf("%d\n", kth(num, root) );
83 break;
84 case 5:
85 spilit(x, y, num-1, root);
86 printf("%d\n", kth(si[x], x) );
87 root = merge(x, y);
88 break;
89 default:
90 spilit(x, y, num, root);
91 printf("%d\n", kth(1, y) );
92 root = merge(x, y);
93 break;
94 }
95 }
96 return 0;
97 }( ఠൠఠ )ノ
FHQTreap刷题记录的更多相关文章
- PE刷题记录
PE刷题记录 PE60 / 20%dif 这道题比较坑爹. 所有可以相连的素数可以构成一张图,建出这张图,在其中找它的大小为5的团.注意上界的估算,大概在1W以内.1W内有1229个素数,处理出这些素 ...
- leetcode刷题记录--js
leetcode刷题记录 两数之和 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标. 你可以假设每种输入只会对应一个答案.但 ...
- Leetcode刷题记录(python3)
Leetcode刷题记录(python3) 顺序刷题 1~5 ---1.两数之和 ---2.两数相加 ---3. 无重复字符的最长子串 ---4.寻找两个有序数组的中位数 ---5.最长回文子串 6- ...
- 刷题记录:[HarekazeCTF2019]encode_and_encode
目录 刷题记录:[HarekazeCTF2019]encode_and_encode 一.知识点 JSON转义字符绕过 php伪协议 刷题记录:[HarekazeCTF2019]encode_and_ ...
- 刷题记录:[De1CTF 2019]Giftbox && Comment
目录 刷题记录:[De1CTF 2019]Giftbox && Comment 一.知识点 1.sql注入 && totp 2.RCE 3.源码泄露 4.敏感文件读取 ...
- 刷题记录:[强网杯 2019]Upload
目录 刷题记录:[强网杯 2019]Upload 一.知识点 1.源码泄露 2.php反序列化 刷题记录:[强网杯 2019]Upload 题目复现链接:https://buuoj.cn/challe ...
- 刷题记录:[XNUCA2019Qualifier]EasyPHP
目录 刷题记录:[XNUCA2019Qualifier]EasyPHP 解法一 1.error_log结合log_errors自定义错误日志 2.include_path设置包含路径 3.php_va ...
- 刷题记录:[DDCTF 2019]homebrew event loop
目录 刷题记录:[DDCTF 2019]homebrew event loop 知识点 1.逻辑漏洞 2.flask session解密 总结 刷题记录:[DDCTF 2019]homebrew ev ...
- 刷题记录:[CISCN2019 东北赛区 Day2 Web3]Point System
目录 刷题记录:[CISCN2019 东北赛区 Day2 Web3]Point System 知识点 1.padding-oracle attack 2.cbc字节翻转攻击 3.FFMpeg文件读取漏 ...
随机推荐
- Python3(六) 面向对象
一.类的定义 1. class Student(): name = ' ' #定义变量 age = 0 def print_file(self): #定义函数 ...
- vue学习(三)完善模板页(bootstrap+AdminLTE)
1.配置index.html <!DOCTYPE html> <html> <head> <meta charset="utf-8"> ...
- 一台机器上同时运行两个tomcat
修改conf/server.xml文件,修改地方有三处 如图
- ORB-SLAM2 论文&代码学习 —— LocalMapping 线程
转载请注明出处,谢谢 原创作者:Mingrui 原创链接:https://www.cnblogs.com/MingruiYu/p/12360913.html 本文要点: ORB-SLAM2 Local ...
- php面试笔记(6)-php基础知识-正则表达式考点
本文是根据慕课网Jason老师的课程进行的PHP面试知识点总结和升华,如有侵权请联系我进行删除,email:guoyugygy@163.com 在面试中,考官往往喜欢基础扎实的面试者,而正则表达式相关 ...
- Tomcat 核心配置
tomcat的核心配置在conf/server.xml中. <Server> 根元素 <Server>即Catalina Servlet组件. <Server por ...
- hadoop3自学入门笔记(1)——虚拟机安装和网络配置
前言 年过30惶惶不安,又逢疫情,还是不断学习,强化自己的能力.hadoop的视频和书籍在15年的时候就看过,但是一直没动手实践过,要知道技术不经过实战,一点提升也没有.因此下定决心边学边做,希望能有 ...
- 回炉重造之重读Windows核心编程-003-内核对象
内核对象是个比较难理解的概念,问题的根源就在于即使是<核心编程>书中也没有说清楚它的定义,只是不停地举例和描述它的性质,还有如何使用. 盲人摸象,难见全貌.只能尽可能列举它的性质,注意使用 ...
- Linux系统开机显示BusyBox v1.22.1 built-in shell(ash) 解决方法
BusyBox 是一个集成了三百多个最常用Linux命令和工具的软件.BusyBox 包含了一些简单的工具,例如ls.cat和echo等等,还包含了一些更大.更复杂的工具,例grep.find.mou ...
- SpringBoot支持SpringData es
ElasticSearch CRUD 1.springboot springData es spring data 是spring对数据访问抽象.这些数据可以放入db,index,nosql等包含以下 ...