LuoguP3377 左偏树 (左偏树)
TLE but corrct in most cases.
inline int Find(int x){
//be careful with the way used for finding your grand papa
for(; fa[x]; x = fa[x]);
return x;
}
inline int Merge(int x,int y){
if(!x) return y;
if(!y) return x;
if(val[x] > val[y] || (val[x] == val[y] && x > y)) x^=y^=x^=y;
son[x][1] = Merge(son[x][1], y);
fa[son[x][1]] = x;
if(dis[son[x][1]] > dis[son[x][0]]) swap(son[x][1], son[x][0]);
dis[x] = dis[son[x][1]] + 1;
return x;
}
inline void Del(int x){
val[x] = -1;
fa[son[x][1]] = fa[son[x][0]] = 0;
Merge(son[x][1], son[x][0]);
}
AC with an undescriable magic.
inline int Find(int x){
return x == fa[x] ? x : fa[x] = Find(fa[x]);
}
inline int Merge(int x,int y){
if(!x) return y;
if(!y) return x;
if(val[x] > val[y] || (val[x] == val[y] && x > y)) swap(x, y);
son[x][1] = Merge(son[x][1], y);
fa[son[x][0]] = fa[son[x][1]] = x;
if(dis[son[x][0]] < dis[son[x][1]]) swap(son[x][0], son[x][1]);
dis[x] = dis[son[x][1]] + 1;
return x;
}
int del[N];
inline void Del(int x){
del[x] = true;
fa[son[x][0]] = son[x][0];
fa[son[x][1]] = son[x][1];
fa[x] = Merge(son[x][0], son[x][1]);//QAQ
/*
Ah, it seems as father is not useful for himself anymore, he becomes a rope for his son to climb higher...
anyway, this program goes well with this sentence, so who care about the reason.
He who laughs last, laughs best...
*/
}
use struct
struct LeftTree{
int l,r,val,dis;
}t[N];
//int son[N][2],fa[N],val[N],dis[N];
int fa[N];
inline int Find(int x){
return x == fa[x] ? x : fa[x] = Find(fa[x]);
}
inline int Merge(int x,int y){
if(!x) return y;
if(!y) return x;
if(t[x].val > t[y].val || (t[x].val == t[y].val && x > y)) swap(x, y);
t[x].r = Merge(t[x].r, y);
fa[t[x].l] = fa[t[x].r] = x;
if(t[t[x].l].dis < t[t[x].r].dis) swap(t[x].l, t[x].r);
t[x].dis = t[t[x].r].dis + 1;
return x;
}
int del[N];
inline void Del(int x){
del[x] = true;
fa[t[x].l] = t[x].l;
fa[t[x].r] = t[x].r;
fa[x] = Merge(t[x].l, t[x].r);//QAQ
/*
Ah, it seems as father is not useful for himself anymore, he becomes a rope for his son to climb higher...
anyway, this program goes well with this sentence, so who care about the reason.
He who laughs last, laughs best...
*/
}
LuoguP3377 左偏树 (左偏树)的更多相关文章
- 图解数据结构树之AVL树
AVL树(平衡二叉树): AVL树本质上是一颗二叉查找树,但是它又具有以下特点:它是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树.在AVL树中任何节点的两个子 ...
- 浅谈算法和数据结构: 十 平衡查找树之B树
前面讲解了平衡查找树中的2-3树以及其实现红黑树.2-3树种,一个节点最多有2个key,而红黑树则使用染色的方式来标识这两个key. 维基百科对B树的定义为“在计算机科学中,B树(B-tree)是一种 ...
- B树、B+树的实现
B树的定义 假设B树的度为t(t>=2),则B树满足如下要求:(参考算法导论) (1) 每个非根节点至少包含t-1个关键字,t个指向子节点的指针:至多包含2t-1个关键字,2t个指向子女的指针 ...
- B树、B-树、B+树、B*树
B树 即二叉搜索树: 1.所有非叶子结点至多拥有两个儿子(Left和Right) 2.所有结点存储一个关键字 3.非叶子节点的左指针指向小于其关键字的字数,右指针指向大于其关键字的字数: 如: B树的 ...
- 人人都是 DBA(VII)B 树和 B+ 树
B 树(B-Tree)是为磁盘等辅助存取设备设计的一种平衡查找树,它实现了以 O(log n) 时间复杂度执行查找.顺序读取.插入和删除操作.由于 B 树和 B 树的变种在降低磁盘 I/O 操作次数方 ...
- 从B 树、B+ 树、B* 树谈到R 树
从B 树.B+ 树.B* 树谈到R 树 作者:July.weedge.Frankie.编程艺术室出品. 说明:本文从B树开始谈起,然后论述B+树.B*树,最后谈到R 树.其中B树.B+树及B*树部分由 ...
- B树和B+树
当数据量大时,我们如果用二叉树来存储的会导致树的高度太高,从而造成磁盘IO过于频繁,进而导致查询效率下降.因此采用B树来解决大数据存储的问题,很多数据库中都是采用B树或者B+树来进行存储的.其目的就是 ...
- 转 浅谈算法和数据结构: 十 平衡查找树之B树
前面讲解了平衡查找树中的2-3树以及其实现红黑树.2-3树种,一个节点最多有2个key,而红黑树则使用染色的方式来标识这两个key. 维基百科对B树的定义为"在计算机科学中,B树(B-tre ...
- 二叉树学习笔记之B树、B+树、B*树
动态查找树主要有二叉查找树(Binary Search Tree),平衡二叉查找树(Balanced Binary Search Tree), 红黑树 (Red-Black Tree ), 都是典型的 ...
随机推荐
- ESP8266远程控制电子门
ESP8266远程控制电子门 最前面介绍: 这是一个使用ESP8266 联网控制继电器,实现手机远程控制电子门,打开关闭,开关一次的物联网联手小项目 附git地址:https://github.com ...
- 解决Docker运行命令时提示"Got permission denied while trying to connect to the Docker daemon socket"类情况
Docker安装命令: 解决Docker运行命令时提示"Got permission denied while trying to connect to the Docker daemon ...
- Google搜索为什么不能无限分页?
这是一个很有意思却很少有人注意的问题. 当我用Google搜索MySQL这个关键词的时候,Google只提供了13页的搜索结果,我通过修改url的分页参数试图搜索第14页数据,结果出现了以下的错误提示 ...
- Spring Cloud入门看这一篇就够了
目录 SpringCloud微服务 架构演进 服务调用方式: Euraka服务注册中心 注册中心 服务提供者(服务注册) 服务消费者(服务发现) 服务续约 失效剔除和自我保护 Consul 特性 Co ...
- Arraylist集合、对象数组
Arraylist集合 ArrayList是List接口的一个实现类,它是程序中最常见的一种集合. 他的特点:在增加或删除指定位置的元素时,会创建新的数组,效率比较低,因此不适合做大量的增删操作,Ar ...
- Docker-配置华为云加速
到网址点击立即使用 https://www.huaweicloud.com/intl/zh-cn/product/swr.html 登录后进入镜像服务 按要求操作即可 相关命令 vi /etc/doc ...
- vscode常用插件快捷键
俗话说,工欲善其事必先利其器,我们码农的器是什么尼?没错,就是我们亲爱的IDE,前端开发者最爱的编辑器应该是vscode了吧.但是我们要怎么去锋利它尼?不外乎就是熟悉它的使用方法.快捷键以及第三方的插 ...
- ABAP CDS DDHEADANNO
- NC202498 货物种类
NC202498 货物种类 题目 题目描述 某电商平台有 \(n\) 个仓库,编号从 \(1\) 到 \(n\) . 当购进某种货物的时候,商家会把货物分散的放在编号相邻的几个仓库中. 我们暂时不考虑 ...
- UI自动化测试执行问题总结
------------恢复内容开始------------ ![image](https://img2022.cnblogs.com/blog/1510476/202206/1510476-2022 ...