【模板】左偏树(可并堆)

本来就想复习一下,发现居然没放在博客里...

神奇的左偏树可以在高度\(O(n)\)的情况下保证插入删除合并的复杂度,真厉害,hack数据见小粉兔

然后就要并查集找爹了

注意一下删掉的点连新根

另外,这个东西是可以整体打tag或者可持久化之类的

可持久化的姿势和treap差不多,直接暴力开节点就可以了


Code:

#include <cstdio>
#include <algorithm>
#define ls ch[x][0]
#define rs ch[x][1]
const int N=1e5+10;
int dis[N],f[N],dat[N],ch[N][2],n,m,del[N];
int Merge(int x,int y)
{if(!x||!y) return x^y;if((dat[x]>dat[y])||(dat[x]==dat[y]&&x>y)) std::swap(x,y);f[x]=f[ls]=f[rs=Merge(rs,y)]=x;if(dis[ls]<dis[rs]) std::swap(ls,rs);dis[x]=dis[rs]+1;return x;
}
int Find(int x)
{return f[x]=f[x]==x?x:Find(f[x]);
}
int main()
{scanf("%d%d",&n,&m);for(int i=1;i<=n;i++) dis[i]=1,f[i]=i,scanf("%d",dat+i);for(int op,x,y,i=1;i<=m;i++){scanf("%d",&op);if(op==1){scanf("%d%d",&x,&y);if(del[x]||del[y]) continue;x=Find(x),y=Find(y);if(x!=y) f[x]=f[y]=Merge(x,y);}else{scanf("%d",&x);if(del[x]) {puts("-1");continue;}x=Find(x);printf("%d\n",dat[x]);del[x]=1;f[x]=f[ls]=f[rs]=Merge(ls,rs);}}return 0;
}

2019.2.26

转载于:https://www.cnblogs.com/butterflydew/p/10439434.html

【模板】左偏树(可并堆)相关推荐

  1. 左偏树(可并堆)初步及其应用

    作者:hsez_yyh 链接:左偏树(可并堆)初步及其应用_hsez_yyh的博客-CSDN博客 来源:湖北省黄石二中信息竞赛组        著作权归作者所有.商业转载请联系作者获得授权,非商业转载 ...

  2. Monkey King(左偏树 可并堆)

    我们知道如果要我们给一个序列排序,按照某种大小顺序关系,我们很容易想到优先队列,的确很方便,但是优先队列也有解决不了的问题,当题目要求你把两个优先队列合并的时候,这就实现不了了 优先队列只有插入 删除 ...

  3. P3377-[模板]左偏树(可并堆)

    正题 题目链接:https://www.luogu.com.cn/problem/P3377 题目大意 开始时nnn个只有一个数的集合,要求支持 合并两个集合 查询一个集合中的最小值并删除 解题思路 ...

  4. BZOJ4003 [JLOI2015]城池攻占 左偏树 可并堆

    欢迎访问~原文出处--博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ4003 题意概括 题意有点复杂,直接放原题了. 小铭铭最近获得了一副新的桌游,游戏中需要用 m 个骑 ...

  5. 【学习笔记】浅谈短小可爱的左偏树(可并堆)

    文章目录 左偏树 左偏树的合并(merge)操作 例题 罗马游戏 [Apio2012]dispatching [JLOI2015]城池攻占 [Baltic2004]sequence 左偏树 左偏树是一 ...

  6. 左偏树初步学习 洛谷P3377

    玩的有点多......睡的有点少... 左偏树是一种支持O(logn)的时间复杂度内进行合并的堆式数据结构. 定义: 外结点:左儿子或者右儿子是空结点的结点 距离:一个结点x的距离disx定义为其子树 ...

  7. 《程序设计解题策略》——1.6 利用左偏树实现优先队列的合并

    本节书摘来自华章计算机<程序设计解题策略>一书中的第1章,第1.6节,作者:吴永辉 王建德 更多章节内容可以访问云栖社区"华章计算机"公众号查看. 1.6 利用左偏树实 ...

  8. 一篇讲左偏树的好文章~

    传送门:http://blog.csdn.net/iaccepted/article/details/6748038 二.左偏树的定义和性质.............................. ...

  9. 【洛谷3377】 左偏树(可并堆)

    前言 其实我是不小心翻线性基的时候看见的. Solution 左偏树只会模板,挖坑待补 代码实现 #include<stdio.h> #include<stdlib.h> #i ...

  10. 可并堆——左偏树 Leftist Heap

    今天学习了左偏树,这是一个好理解而且好写的数据结构,和二叉堆一样可以在O(1)时间内取出优先级最高的值,O(logn)时间内删除优先级最高的值,不同的是如果要合并两个堆那么二叉堆就只能跪了.而左偏树能 ...

最新文章

  1. 关于PHP.ini文件的设定
  2. 新手求助:大神们帮帮我,关于在ViewPage中添加GridView的问题
  3. Vscode在Windows上配置远程开发
  4. MongoDB 安装配置
  5. ECCV 2018丨YOLO遇上OpenPose,近200FPS的高帧数多人姿态检测
  6. 实战系列之天气预报实时采集
  7. 【面朝大厂】万字+图解 Redis,面试不用愁了!
  8. ECshop新手入门模板制作教程[转载]
  9. 2小时部署实时反欺诈深度学习模型 —— IBM主机机器学习平台社区版简介
  10. 我为什么放弃Go语言
  11. 年仅31岁!90后协和博士、医学考研名师刘不言意外离世
  12. Prokka:从安装到使用的那些坑!!!
  13. CorelDRAW常用工具之涂抹工具
  14. 神奇的Navigator对象
  15. LInux 实训二记录
  16. 不用网的cmd小游戏来啦
  17. Fatal error: require(): Failed opening required ‘/home/www/xx/public/../thinkphp/start.php
  18. 【mongoDB】一一一一安装报错1058解决方案
  19. 仿简书,知乎pc官网顶部导航栏上下滚动效果
  20. PHP-FFMpeg 安装

热门文章

  1. 互联网公司这一年,我被迫知道了这些内幕和秘密...
  2. HTTPS 证书生成原理和部署细节
  3. 如何用一句话证明你搞 IT(挨踢)的?
  4. 归并排序验证性实验_性能优化技巧:有序归并
  5. 搜索python代码的软件_python小说爬虫工具,小说搜索下载软件附源码
  6. 001 lambda的分析
  7. 关于setTimeout的面试题
  8. 第6章 vector向量容器
  9. Android开发工程师,前行路上的14项技能
  10. 程序员究竟还需要读书么?