区间第K值
来源:互联网 发布:查询行业数据的网站 编辑:程序博客网 时间:2024/05/21 11:02
题目
这应该是很经典的题目了,所以就不再阐述了。
解法:
二分+分块
首先,因为在一个区间中,比某一个数小的数的数量应该是随着值得增大而增大的,所以看到线性,就可以二分了。但是首先还得先预处理一下,因为求得是不同的区间,所以直接处理整个区间是不行的。那么就不难想到用分块来预处理一个小区间的情况,之后扫过来就比较快了。
但是分块的复杂度是比较高的,所以这个题目用分块的方法是只能写部分分的。并且分块需要注意离散化(可能是因为我是蒟蒻),因为一个数是可以重复的,所以说它可以当做很多个第i值。
二分+线段树
在某种意义上来说,线段树和分块是差不多的,只是包装了一下,总的思路还是差不多的。
二分+归并树
这个写法我还没有写,但是它就是用归并排序+线段树,就好了。
主席树
这个写法是比较重点的一个写法。主席树还是比较玄学的,我看了两个小时才看懂。主席树其实就是一个线段树,但是它每一次的更新状态只用记录包含他区间的节点。先离散序列的权值,建一颗空的权值线段树。再把序列中的元素依次加入到树中,加入每个元素A[i]时,维护序列[1,i]的权值线段树。序列中的每个点,都能找到一棵对应前缀权值线段树。离散是来记录连续区间的。
主席树的复杂度比较低,所以写这个题那些无良管理员也是卡不掉的(我的分块就被卡了)。如果理解的话,就是比较优雅的。
阅读全文
0 0
- 区间第K值
- 区间第K大值
- 区间第K值带修改 分块
- 区间第K大数
- 区间第K大
- 区间第K大数
- 第K大区间
- 区间第k小
- 区间第k大
- 两个区间第K大问题
- 静态区间第k大数
- 静态区间第K大
- poj2104 区间第K大
- 分块 区间第k小
- 区间第k小 分块
- 划分树——求区间第k大值
- poj2761——treap,区间第K小值
- POJ 2104 区间第K大值(划分树做法)
- wewbstorm 2017.2 中文输入法无法输入
- 学习心得
- android 自动拨打电话和挂断电话(反射和intent方式)
- Error:Execution failed for task ':app:transformClassesWithDexForDebug'.
- Nexus预定的三个用户
- 区间第K值
- 安卓Toolbar和DrawerLayout抽屉的使用
- Java关键字和保留字
- pyQt5-俄罗斯方块游戏
- MySQL join left join right join 区别
- Android 项目eclipse、Android Studio目录结构分析
- Java学习心得之方法重载
- mybatis 中if判断把零识别为null
- 无网络情况的开发板和PC传输数据