题目大意:

给定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 题解的更多相关文章

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

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

  2. [补档][HZOI 2016]简单的Treap

    [HZOI 2016]简单的Treap 题目 Treap是一种平衡二叉搜索树,除二叉搜索树的基本性质外,Treap还满足一个性质: 每个节点都有一个确定的优先级,且每个节点的优先级都比它的两个儿子小( ...

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

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

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

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

  5. COGS 2416.[HZOI 2016]公路修建 & COGS 2419.[HZOI 2016]公路修建2 题解

    大意: [HZOI 2016]公路修建 给定一个有n个点和m-1组边的无向连通图,其中每组边都包含一条一级边和一条二级边(连接的顶点相同),同一组边中的一级边权值一定大于等于二级边,另外给出一个数k( ...

  6. COGS2421 [HZOI 2016]简单的Treap

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

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

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

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

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

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

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

随机推荐

  1. SVN中Branch和Merge实践

    参考资料:http://blog.csdn.net/eggcalm/article/details/6606520 branch主要用于新功能的开发,开发过程中不断从trunk merge revis ...

  2. 微信下输入法在IOS和安卓下的诡异

    1.验证window.innerHeight 系统版本 iOS9.1.1 安卓4.4.4 没有输入法的情况下 504 567 有输入法的情况下 208 273 看来两者的window.innerHei ...

  3. java.lang.ClassNotFoundException与java.lang.NoClassDefFoundError的区别

    java.lang.ClassNotFoundException与java.lang.NoClassDefFoundError的区别   以前一直没有注意过这个问题,前两天机缘巧合上网查了一下,然后自 ...

  4. 【转】SPDY协议

    SPDY协议 - v3 原文:SPDY Protocol - Draft 3 翻译:邱鹏滔(QQ: 95350530,主页:www.fireflysource.com) 1 概述 HTTP协议的瓶颈在 ...

  5. 前端排版-使用inline-block且两端对齐

    那天排遇到这样一个页面,每个logo紧挨着,而且两端对齐.尼玛,没招啊~ 今天终于找到了解决办法: <!DOCTYPE html> <html> <head> &l ...

  6. linux:vi 替换命令

    转自:http://www.cnblogs.com/afant/archive/2009/03/11/1408745.html :s/^.*$/\L&/100 ##将100行内的小写转换成大写 ...

  7. HTML5+学习笔记1-------边看代码边研究中

    document.addEventListener('touchstart',function(){ return false; },true); touchstart当手指触摸屏幕时候触发,即使已经 ...

  8. 移动端网站优化指南-WAP篇

    转载:http://seofangfa.com/mobile-seo/mobile-seo-guide.html 1.域名优化:启用短域名,例如:m.abc.com,便于用户记忆,方便搜索蜘蛛查找,减 ...

  9. flask 知识点总结

    ============================request对象的常用属性============================具体使用方法如下:request.headers, requ ...

  10. $(document).ready(){}、$(fucntion(){})、(function(){})(jQuery)onload()的区别

     1.首先说JQuery的几个写法  $(function(){     //do someting   });   $(document).ready(function(){     //do so ...