查找第k大

Submit Page    Summary    Time Limit: 1 Sec     Memory Limit: 128 Mb     Submitted: 316     Solved: 20    


Description

小W有很强的好胜心,也有很明确的目标,总是希望当第k名,但是小W太菜了,经常达不到目标,于是他每次考试后都想知道第k名的分数是多少,然后以它为目标。 现在给出了每个人的分数,请求编程能力很强的你帮他迅速找到第k名的分数为多少,这样他才有更多的时间去学习。

Input

第一行为一个正整数t代表有t组数据。每组数据第一行为两个正整数n和k,第二行为n个正整数。 1 < =k < =n < =107

Output

对于每组数据,输出第k大的数

Sample Input

1
6 2
1 2 3 4 5 6

Sample Output

5

Hint

#include<cstdio>
#include<algorithm>
namespace fastIO
{
#define BUF_SIZE 100000
bool IOerror = 0;
inline char nc()
{
static char buf[BUF_SIZE], *p1 = buf + BUF_SIZE, *pend = buf + BUF_SIZE;
if ( p1 == pend )
{
p1 = buf;
pend = buf + fread( buf, 1, BUF_SIZE, stdin );
if ( pend == p1 )
{
IOerror = 1;
return(-1);
}
} return(*p1++); }
inline bool blank( char ch )
{
return(ch == ' ' || ch == '\n' || ch == '\r' || ch == '\t');
}
inline void rd( int &x )
{
char ch;
while ( blank( ch = nc() ) )
;
if ( IOerror )
return;
for ( x = ch - '0'; (ch = nc() ) >= '0' && ch <= '9'; x = x * 10 + ch - '0' )
;
}
#undef BUF_SIZE
};
using namespace fastIO;
using namespace std;
const int N = 1e7+10;
int arrNum[N];
int Partition(int *arrNum, int l, int r)
{
if(arrNum == NULL || l > r)
{
return -1;
}
int mid = (l+r)>>1;
swap(arrNum[mid], arrNum[r]);
int leftSeqIndex = l; for(int i = l; i < r; i++)
{
if(arrNum[i] < arrNum[r])
{
if(i > leftSeqIndex)
{
swap(arrNum[i], arrNum[leftSeqIndex]);
}
++leftSeqIndex;
}
} swap(arrNum[leftSeqIndex], arrNum[r]);
return leftSeqIndex;
} int GetNumber(int *arrNum, int n, int k)
{
if(arrNum == NULL || n <= 0 || k <= 0 || k > n)
{
return -1;
} k = n-k+1;
int l = 0;
int r = n-1;
while(l <= r)
{
int index = Partition(arrNum, l, r);
if(index+1 == k)
{
return arrNum[index];
}
else if(index+1 < k)
{
l = index+1;
}
else
{
r = index-1;
}
}
} int main()
{
int t,n,k;
rd(t);
while(t--)
{
rd(n);
rd(k);
for(int i=0;i<n;++i)
{
rd(arrNum[i]);
}
int value = GetNumber(arrNum, n, k);
printf("%d\n",value);
}
return 0;
} /**********************************************************************
Problem: 2078
User: song_hai_lei
Language: C++
Result: AC
Time:924 ms
Memory:40280 kb
**********************************************************************/

最新文章

  1. POJ2104 K-th Number(主席树)
  2. apche 虚拟主机设置
  3. ui-router中的锚点问题(angular中的锚点问题)
  4. android 14.04 64位 adb cannot run program adb
  5. 【Markdown】notepad++ 支持 markdown语法、预览
  6. Double-checked locking and the Singleton pattern--双重检查加锁失效原因剖析
  7. 01-05-01-1【Nhibernate (版本3.3.1.4000) 出入江湖】延迟加载及其class和集合(set、bag等)的Lazy属性配置组合对Get和Load方法的影响
  8. oracle-TNS是什么?
  9. pip 错误Requested **, but installing version **
  10. web qq 获取好友列表hash算法
  11. asp.net mvc4中model与Model的区别
  12. 基于visual Studio2013解决算法导论之030二叉查找树
  13. selenium自动化--(JAVA方法写的)第一章 源代码工程的导入
  14. easyui datebox定位到某一个日期, easyui datebox直接定位到具体的日期, easyui datebox MoveTo方法使用
  15. Linux常用快捷按键
  16. c++三种继承方式public,protect,private
  17. 微信小程序实现计算器功能
  18. ElasticSearch6(二)-- Java API连接es
  19. zepto 入门
  20. 2. DAS,NAS,SAN在数据库存储上的应用

热门文章

  1. Ansible之入门简介
  2. Elasticsearch生产环境遇到的问题以及解决方案
  3. T-SQL, Part II: IMAGE/TEXT Insert
  4. nyoj 65-另一种阶乘问题 (Java 高精度)
  5. 领扣(LeetCode)二叉树的所有路径 个人题解
  6. 【Spring】简述@Configuration配置类注册BeanDefinition到Spring容器的过程
  7. 30L,17L,13L容器分油,python递归,深度优先算法
  8. 内网环境搭建NTP服务器
  9. java中的运算,+-* /% | ^ &amp;
  10. day20191205笔记