摘要: 在算法篇介绍过求这样的某一个范围内第k大的数的三种方法。分治方法,对于求一组范围内的值可以考虑。但是求多组的时候就不行了,因为这种方法会改变原数组的排序。如果要有多组询问时,就必须赋值到另外一个数组中,结果TLE.代码:View Code 1 #include <iostream> 2 #include <stdio.h> 3 #include <memory.h> 4 #include <algorithm> 5 using namespace std; 6 7 const int maxnum=100005; 8 int array[maxn 阅读全文
posted @ 2012-08-07 17:32 pushing my way 阅读(263) 评论(0) 推荐(0) 编辑
摘要: 1.划分树是一种基于线段树的数据结构。主要用于快速求出(在log(n)的时间复杂度内)序列区间的第k大值.2.查找整序列的第k大值方法:a.采用快速查找法,分治思想。然而此方法会破坏原序列,并且需要O(n)的时间复杂度。b.使用二叉平衡树进行维护,此方法每次查找时间复杂度仅为O(logn)。然而此方法丢失了原序列的顺序信息,无法查找出某区间内的第k大值c.划分树:基本思想就是对于某个区间,把它划分成两个子区间,左边区间的数小于右边区间的数。查找的时候通过记录进入左子树的数的个数,确定下一个查找区间,最后范围缩小到1,就找到了。3.建树:使用一个辅助数组对原数组进行排序,找到这个区间的中位数a[ 阅读全文
posted @ 2012-08-07 10:57 pushing my way 阅读(229) 评论(0) 推荐(0) 编辑