关于在指定区间求第k小的数,求高效率算法
来源:互联网 发布:淘宝如何推爆款 编辑:程序博客网 时间:2024/04/30 12:11
一、问题来源
给定一个整数数列a[1..n],其中每个元素都不相同,你的程序要能回答一组格式为Q (i , j , k)的查询,Q(i, j ,k)的意思是“在a[i..j]中第k小的数是多少?”
例如令 a = {1, 5, 2, 6, 3, 7, 4},查询格式为Q (2 , 5 , 3),数列段a[2..5] = {5, 2, 6, 3},第3小的数是5,所以答案是5。
第一行包括一个正整数n,代表数列的总长度,还有一个数m,代表有m个查询。n、m满足:1≤n≤100 000,1≤m≤5 000。
第二行有n个数,代表数列的元素,所有数都不相同,而且不会超过10^9
接下来有m行,每行三个整数i、j、k,代表一次查询,i、j、k满足:1≤i≤j≤n, 1≤k≤j−i+1。
关于这个问题可能已经讨论了很多次,但是我用快排的变形还是超时,希望能看更高效的算法
二、解答
(1)、如果是进行1次查询的话,可以采用快速排序的变种,时间复杂度为O(N),但是有5000次的话 效率就不太高了。
(2)采用伴随数组的方法。排序复杂为O(NlogN),每次查找的复杂度为O(N).
详细的讲解可参考
http://blog.csdn.net/v_JULY_v/article/details/6452100
采用后伴随数组的好处就是,为了对此查询,“一次排序,多次查找”!伴随数组的实现挺简单的。
- 关于在指定区间求第k小的数,求高效率算法
- 求m个区间中第k小的数
- 算法学习(八)求给定区间的第k小(大)数
- POJ 2104-K-th Number(划分树)求区间内第k小的数
- 求第k小的数
- Java 求第K小的数
- 求第k小的数
- 【算法题】BFPRT算法:求第K小或者第K大的数
- 【算法】求第k大的数
- 可持久化线段树入门题 hdu2665 求区间第k小的数
- POJ 2761-Feed the dogs(划分树)求区间内第k小的数
- poj 2761 多种数据结构算法求区间第k大的数
- Google算法题:M-求二叉搜索树的第K小的数
- 分治算法求N个数中第K小(大)的数
- 求一组整数的第k小的数
- 快排的思想求第K小的数
- hdu4417 树状数组(求指定区间比指定数小的数的个数)
- 求数列中第K小的数
- 05.抽象工厂模式+反射--AbstractFactory&Reflect
- Postgresql 中 根据ParentID 获取所有子 id
- 接口开发任务完成中(待续)
- [Android]用迅雷去下载更新我们的Sdk.嘿嘿``~
- linux 中chmod命令使用的详细解释
- 关于在指定区间求第k小的数,求高效率算法
- MTK图片解析流程
- rest 与 soap的比较
- MFC如何进入程序进入点(MFC学习)----1
- note110725_1
- 网上开店流程及注意事项
- 给javascript添加事件
- 解决中文Chrome最小字体为12px问题
- js 给所有加载本JS页面地指定标签进行绑定事件