bzoj 1146树链剖分
来源:互联网 发布:淘宝店铺招牌模板下载 编辑:程序博客网 时间:2024/06/14 02:08
我用的是此题的树链剖分方法,此题时限50S。。。。
首先将树按链重新标号,然后将一段链给放到线段树中取。由于求u到v的k大值,那么我们可以对于一段链中二分查找对于某一个值小于这个值的个数有多少个,那么我们就可以知道这个值如果恰好是第k大的就是答案所求。用线段树的话可以将一段区间的值快速求出来
实现就是对于线段树表示表示区间的节点,对于那一段区间我们建立一个二叉搜索树(我用的treap,用于统计大于某个值的个数有多少个),然后对于每一个二分答案,我们对于这个值在u到v的树链上求小于这个值的答案有多少个就好了,直接按树链剖分的方法往一端靠上去求累计和就好了。
其总的复杂度是n(logn)^4其实想想这个复杂度对于一组数据已经接近n^2了但是考虑到线段树的区间更新,我们其实区间的查询能大大提高效率,20s可以过
这题思路这样差不多就很好写了,就是编码复杂点了。。。
这里建树忧伤死我了。。。。下面是我写treap的过程。。。
1、treap答案最多的有80000个节点,最开始的方法是treap建立静态的数组,但是考虑线段树是8000*4在加上每个treap起码有8000*(2+3)大小, 开不下。。。。。忧伤啊
2、然后我又写了个c++动态生成数组的treap,每次生成线段树r-l+4的数组大小,但是任然是静态的内存池,过到了第7组就re了,因为我发现每次删除一个节点后在生成节点内存池下标往后走。。。忧伤
0 0
- bzoj 1146树链剖分
- bzoj 1146树链剖分
- 【树链剖分】【bzoj 1146】: [CTSC2008]网络管理Network
- bzoj 1146 - Network
- bzoj 1036 树链剖分
- BZOJ 2243 树链剖分
- bzoj 3626 树链剖分
- BZOJ 2243 染色 树链剖分
- BZOJ 3626 LCA 树链剖分
- BZOJ 2819 Nim 树链剖分
- BZOJ 1036 树链剖分
- BZOJ 2157 旅游 树链剖分
- BZOJ 2157 旅游 树链剖分
- bzoj 2243 染色(树链剖分)
- bzoj 2243 树链剖分 染色
- BZOJ 4127 Abs 树链剖分
- BZOJ 2243 染色 树链剖分
- BZOJ 3531 旅行【树链剖分】
- 关于SoftReference
- 一个模拟strstr()函数的程序
- JavaScript核心——闭包
- Flex实现自定义图形按钮+按钮区域响应
- 10168 Summation of Four Primes
- bzoj 1146树链剖分
- HDU 5229 【水题】
- 在Web工程下读取文件的几种方法
- UAP拓展按钮自定义功能方法步骤
- 跨浏览器兼容的HTML5视频音频播放器
- linux tar 命令
- 详解Java解析XML的四种方法
- ajax 笔记--二级联动
- Git 常用命令详解(二)