COGS 2421.[HZOI 2016]简单的Treap 题解
题目大意:
给定n个数及其优先级,求对应的符合最小堆性质的Treap的先序遍历。
n<=500000。
解法:
目前为止我只想到了三种解法,其中第三种是正解。
1.暴力1
以优先级为关键字排序,然后按顺序构建BST即可。注意不能加平衡,因为这样会改变树的先序遍历。
期望复杂度O(nlogn)(排序和构建),考虑极端情况下树可能是一个链,最坏情况复杂度O(n2)。
2.暴力2
直接构建Treap,但遇到是链的情况仍然是O(n2)。
考虑将节点顺序打乱后进行建树,常数大大减小,但由于链状树的深度为n,最坏情况仍然O(n2)(这个复杂度是达哥提出的,不知道对不对)。
3.RMQ+分治
考虑以数大小为关键字排序,那么显然排序后一个点的左子树就在它的左边,右子树就在它右边,而对于一个区间[l,r],显然它对应的子树的树根就是区间中优先级最小的点,这样就转化为了RMQ问题。
具体做法:
1.把元素按数的大小排序,用Sparse-Table算法预处理RMQ。
2.初始区间为[1,n],每次从区间中选出优先级最小的点作为子树的根,递归建左子树和右子树(虽然实现过程中并不用真的建树)。
由于每个点都被选作树根并往下递归一次,而Sparse-Table的查询是O(1)的,因此总复杂度为O(nlogn)(排序),如果使用线性排序则可以降到O(n)。
后记:
这个题也是一时脑洞的产物,主要是受蓝书中Treap唯一这句话的启发,因此出了这么一道题。
这道题的解法也是一时脑洞,不过确实不错,值得借鉴。
其实一开始本来想卡暴力,发现标程最后两个点要跑1s多一点点,因此时限开的1.5s,这下暴力1就有了80分,至于暴力2,估计是卡不住的了。
最近出题不少,估计是要发扬ad神犇的优良传统了。
COGS 2421.[HZOI 2016]简单的Treap 题解的更多相关文章
- [COGS 2421] [HZOI 2016] 简单的Treap 笛卡尔树
笛卡尔树就是你给两维限制,一维堆R,一维二叉搜索树K,平地拔起一棵Treap,最广范的应用:用LCA求区间最值,建Treap,还有个什么范围top k我表示并不会查都查不到.它最妙最高的地方在于用栈来 ...
- [补档][HZOI 2016]简单的Treap
[HZOI 2016]简单的Treap 题目 Treap是一种平衡二叉搜索树,除二叉搜索树的基本性质外,Treap还满足一个性质: 每个节点都有一个确定的优先级,且每个节点的优先级都比它的两个儿子小( ...
- cogs——2478. [HZOI 2016]简单的最近公共祖先
2478. [HZOI 2016]简单的最近公共祖先 ★☆ 输入文件:easy_LCA.in 输出文件:easy_LCA.out 简单对比时间限制:2 s 内存限制:128 MB [题 ...
- cogs 2478. [HZOI 2016]简单的最近公共祖先
2478. [HZOI 2016]简单的最近公共祖先 ★☆ 输入文件:easy_LCA.in 输出文件:easy_LCA.out 简单对比时间限制:2 s 内存限制:128 MB [题 ...
- COGS 2416.[HZOI 2016]公路修建 & COGS 2419.[HZOI 2016]公路修建2 题解
大意: [HZOI 2016]公路修建 给定一个有n个点和m-1组边的无向连通图,其中每组边都包含一条一级边和一条二级边(连接的顶点相同),同一组边中的一级边权值一定大于等于二级边,另外给出一个数k( ...
- COGS2421 [HZOI 2016]简单的Treap
题面见这里 大概是个模板题 Treap暴力插入的做法太暴力了并不优美 这里就需要用到笛卡尔树的构造方法,定义见这里 在 假的O(n) 的时间内构造一棵Treap 把元素从小到大排序 这样从小到大插入时 ...
- COGS——T 2478. [HZOI 2016]简单的最近公共祖先
http://www.cogs.pro/cogs/problem/problem.php?pid=2478 ★☆ 输入文件:easy_LCA.in 输出文件:easy_LCA.out 简单 ...
- COGS 2199. [HZOI 2016] 活动投票
2199. [HZOI 2016] 活动投票 ★★ 输入文件:hztp.in 输出文件:hztp.out 简单对比时间限制:0.5 s 内存限制:2 MB [题目描述] 衡中活动很多, ...
- COGS 2485. [HZOI 2016]从零开始的序列
2485. [HZOI 2016]从零开始的序列 ★★ 输入文件:sky_seq.in 输出文件:sky_seq.out 简单对比时间限制:1 s 内存限制:256 MB [题目描述] ...
随机推荐
- Latex论文写作-Texsdudio 快捷键总结
Latex论文写作-Texsdudio 快捷键总结 The keyboard shortcuts can be modified at Options -> Shortcuts. The fo ...
- 网络框架 & 云端
Scut 傲瑞组件开发手册(02) -- 轻量级的通信引擎 StriveEngine http://blog.oraycn.com/StriveEngine.aspx
- Code First 迁移
https://msdn.microsoft.com/zh-cn/data/jj591621 Data Access and Storage > 学习 > Entity Framework ...
- iOS开发工具-网络封包分析工具Charles
转自唐巧的技术博客:http://blog.devtang.com/blog/2013/12/11/network-tool-charles-intr/ Charles是在Mac下常用的截取网络封包的 ...
- java批量生成excel代码分享
package com.test.util; /** * @author ocq * */ import java.io.FileOutputStream; import java.io.IOExce ...
- iframe和frameset的使用
iframe是:inner frame的缩写, 必须指明src属性,不能直接在里面写内容, 否则不会显示. 可以载入html, *.图片文件, txt文件等等. html的属性中,表示长度高度的尺寸属 ...
- PHP中spl_autoload_register()函数
spl_autoload_register — 注册给定的函数作为 __autoload 的实现 官方地址:http://php.net/manual/zh/function.spl-autoload ...
- lua 学习
尽管所有的脚本语言在特定领域都有自己的一席之地,但在游戏开发的世界里,Python 和 Lua 是非常适合的,因为它们可以直接调用C++的功能. lua最让人惊喜的地方应该是它的执行速度,目前没有任何 ...
- vs2010 中无法打开 源文件 "stdafx.h" 未定义标识符 “xxx”
解决方案: 项目属性->配置属性->C/C++->常规->附加包含目录->$(ProjectDir)
- Maven初级学习(一)手把手教你Maven安装
序:学习安装Maven,在Windows和Unix系统上. 一.Windows系统安装MVN 前提正确安装JDK1.5以上的版本 1 下载最先版Mvn http://maven.opache.org/ ...