[HZOI 2016]简单的Treap

题目

Treap是一种平衡二叉搜索树,除二叉搜索树的基本性质外,Treap还满足一个性质:
每个节点都有一个确定的优先级,且每个节点的优先级都比它的两个儿子小(即它的优先级满足堆性质)。
不难证明在节点的优先级都事先给定且互不相同时,对应的Treap有且仅有一个。
现在,给定n个数和每个数对应的优先级,求出对应的以数的大小作为二叉搜索树比较依据的Treap的先序遍历结果。
对先序遍历的定义是:先访问根节点,再访问左子树,最后访问右子树。

INPUT

第一行一个数n表示数的个数。
第二行n个数表示每个数的大小。
第三行n个数表示每个数对应的优先级。

OUTPUT

一行n个数,表示Treap的先序遍历结果(对于每个节点,输出对应的数)。

SAMPLE

INPUT

7
2 11 5 9 1 4 3
2 10 1 8 4 6 5

OUTPUT

5 2 1 3 4 9 11

解题报告

不要相信题目名称!!!
这题卡Treap,用Treap会T掉俩点,那么我们就需要黑科技——笛卡尔树来解决问题了。

笛卡尔树

笛卡尔树是一种同时满足二叉搜索树和堆的性质的数据结构。 可在一个数组上构造出来(时间复杂度可以达到O(n))。树中节点有几个属性, key(节点元素的大小)、index(节点在原数组中的索引)、left(左子节点)、right(右子节点)、parent(父节点)。

性质

树中的元素满足二叉搜索树性质,要求按照中序遍历得到的序列为原数组序列
树中节点满足堆性质,节点的key值要大于其左右子节点的key值

构造

要求在给定的数组的基础上构造一棵笛卡尔树,这可以在O(n)的时间内完成。 其具体思路为:
当按照index从1到n(或者从0到n-1)的顺序将数组中的每个元素插入到笛卡尔树中时,当前要被插入的元素的index值最大,因此根据二叉搜索的性质需要沿着当前已经完成的笛卡尔树的根的右子树链搜索。
由于笛卡尔树要满足堆的性质(以最大堆为例),父节点的key值要大于子节点的key值,所以沿着树根的右子树链往下走,直到搜索到的节点的key值小于等于当前要插入节点的key值。
此时,便找到了当前结点需要插入的位置,记为P。此时P下方的节点的key值肯定小于当前被插入节点的key,但是index也小于当前插入节点的index(即需要在二叉搜索树中当前结点之前的位置),所以将当前节点插入到P的位置,同时将以P为根的子树挂载到新插入的节点的左子树(为了保证P及其子树在新插入节点之前被二叉搜索)。
实际实现的时候,可以采用栈的数据结构。栈中保存当前树中的从树根开始的右子节点链,根在栈底部。
插入新元素的时候,从树的右子链的最末尾从下往上查找,直到找到第一个满足堆性质的节点(即找到的节点的key值大于当前需要插入的节点)。用栈来实现就是从栈顶不断弹出元素,直到栈顶的元素的key大于当前结点的key,然后将该节点入栈,同时将最后被弹出的节点的parent指向该节点,以及该节点的左子节点指向最后被弹出的节点。
复杂度分析: 每个节点最多入栈一次,出栈一次,因此时间复杂度为 O(n)
ps:其实没那么麻烦= =,几个数组乱抡就可以了
那么剩下的就很简单了,按关键字排个序,建树,然后乱搞- -

[补档][HZOI 2016]简单的Treap的更多相关文章

  1. COGS 2421.[HZOI 2016]简单的Treap 题解

    题目大意: 给定n个数及其优先级,求对应的符合最小堆性质的Treap的先序遍历. n<=500000. 解法: 目前为止我只想到了三种解法,其中第三种是正解. 1.暴力1 以优先级为关键字排序, ...

  2. COGS2421 [HZOI 2016]简单的Treap

    题面见这里 大概是个模板题 Treap暴力插入的做法太暴力了并不优美 这里就需要用到笛卡尔树的构造方法,定义见这里 在 假的O(n) 的时间内构造一棵Treap 把元素从小到大排序 这样从小到大插入时 ...

  3. [COGS 2421] [HZOI 2016] 简单的Treap 笛卡尔树

    笛卡尔树就是你给两维限制,一维堆R,一维二叉搜索树K,平地拔起一棵Treap,最广范的应用:用LCA求区间最值,建Treap,还有个什么范围top k我表示并不会查都查不到.它最妙最高的地方在于用栈来 ...

  4. cogs——2478. [HZOI 2016]简单的最近公共祖先

    2478. [HZOI 2016]简单的最近公共祖先 ★☆   输入文件:easy_LCA.in   输出文件:easy_LCA.out   简单对比时间限制:2 s   内存限制:128 MB [题 ...

  5. cogs 2478. [HZOI 2016]简单的最近公共祖先

    2478. [HZOI 2016]简单的最近公共祖先 ★☆   输入文件:easy_LCA.in   输出文件:easy_LCA.out   简单对比时间限制:2 s   内存限制:128 MB [题 ...

  6. COGS——T 2478. [HZOI 2016]简单的最近公共祖先

    http://www.cogs.pro/cogs/problem/problem.php?pid=2478 ★☆   输入文件:easy_LCA.in   输出文件:easy_LCA.out   简单 ...

  7. COGS 2199. [HZOI 2016] 活动投票

    2199. [HZOI 2016] 活动投票 ★★   输入文件:hztp.in   输出文件:hztp.out   简单对比时间限制:0.5 s   内存限制:2 MB [题目描述] 衡中活动很多, ...

  8. COGS 2485. [HZOI 2016]从零开始的序列

    2485. [HZOI 2016]从零开始的序列 ★★   输入文件:sky_seq.in   输出文件:sky_seq.out   简单对比时间限制:1 s   内存限制:256 MB [题目描述] ...

  9. cogs——2419. [HZOI 2016]公路修建2

    2419. [HZOI 2016]公路修建2 ★☆   输入文件:hzoi_road2.in   输出文件:hzoi_road2.out   简单对比时间限制:1 s   内存限制:128 MB [题 ...

随机推荐

  1. 10分钟轻松学会python turtle绘图

     1. 画布(canvas) 1.1 相关函数: 2. 画笔 2.1 画笔的状态 2.2 画笔的属性 2.3 绘图命令 3. 命令详解 4. 绘图举例 4.1 太阳花 4.2 绘制小蟒蛇 4.3 绘 ...

  2. PHP中递归最详解释.

    说到递归函数想必会有很多同学感到晕晕的,很难绕,容易绕错,那下面就让我来为大家详解一下. 首先,什么是递归函数呢? 1.所谓递归:指的是在函数内部,调用函数自身的操作.2.递归分两布:递(从最外层函数 ...

  3. Dockerfile命令详解(超全版本)

    制作Dockerfile为Docker入门学习的第一步(当然,除了环境搭建). 本文收集.整理了官网关于制作Dockerfile的全部命令(除SHELL没整理,这个就不弄了),可帮助大家快速进入Doc ...

  4. Linux: bash script

    content [toc] bash scripts equivalent bash command to rename a bash variable/command alias fire='fir ...

  5. 百度统计API的使用

    百度统计API的使用 在搭建自己博客的时候,希望自己能有个日志系统,能够看到PV.UV等信息,同时自己也搭建了个ELK系统,可惜服务器配置太低(1GHZ+1G内存),根本运行不起来.只能使用第三方的日 ...

  6. 霍尔开关MH253ESO在减压神器指尖手指陀螺中的作用

    手指陀螺首先在欧美国家流行起来,现如今又在国外掀起一帆狂潮,它是一款排遣无聊的小玩具,又被称为减压神器. 其工作原理:是由一个双向的对称体作为主体,在主体中间嵌入一个轴承的设计组合,整体构成一个可平面 ...

  7. Android高仿qq及微信底部菜单的几种实现方式

    最近项目没那么忙,想着开发app的话,有很多都是重复,既然是重复的,那就没有必要每次都去写,所以就想着写一个app通用的基本框架,这里说的框架不是什么MVC,MVP,MVVM这种,而是app开发的通用 ...

  8. v2013调试无法访问此网站 localhost 拒绝了我们的连接请求

    问题描述:          别人给的服务器代码,在本地部署以后调试的,localhost:8080 可以访问,localhost:2524访问不了需要改什么配置吗 解决思路:           这 ...

  9. 网络编程学习笔记(三)UDP

    1.不可靠的.效率高.数据报(数据打成一个小包一个小包地往外发).非连接. 2.UDP是非连接的,因此严格来说并不区分服务器端和客户端. 3.UDP通信过程:UDP都是通过字节数组进行对话的.     ...

  10. Python Django之路与您同行

    大家好,我是TT,互联网测试行业多年,没有牛逼的背景,也没有什么可炫耀的,唯独比他人更努力,在职场打拼.遇到过的坑,走过的弯路,愿意与大家分享,分享自己的经验,少走弯路.首发于个人公众号[测试架构师] ...