瑶瑶的第K大

Time Limit:2000MS     Memory Limit:128000KB     64bit IO Format:%lld & %llu

Description

一天,萌萌的妹子--瑶瑶(tsyao)很无聊,就来找你玩。可是你们都不知道玩什么。。。尴尬了一阵子,机智的瑶瑶就提议:“这样吧,你说N个整数xi,然后在随意说一个数字k,我能够快速地说出这些数字里面第 大的数字。”

Input

第1行 两个整数N, K以空格隔开;

第2行 有N个整数(可出现相同数字,均为随机生成),同样以空格隔开。

0 < n ≤ 5*10^6 , 0 < k ≤ n

1 ≤ xi ≤ 10^8

Output

输出第  大的数字。

Sample Input

5 2
5 4 1 3 1

Sample Output

4

Hint

如2,2,1中三个数字中第一大数字为2,第二大数字也为2,第三大数字为1 。
 
 
 
 
解题思路:
   手打快排,方向性、目的性地选择区间分治,输入外挂优化。
 
#include<stdio.h>
#include<algorithm>
#include<string.h>
using namespace std;
const int maxn=1e7;
int a[maxn];
int scan(){ char c;
int sgn,ret;
if(c=getchar(),c==EOF)
return 0;
while(c!='-'&&(c<'0'||c>'9'))
c=getchar();
sgn=(c=='-')?-1:1;
ret=(c=='-')?0:(c-'0');
while(c=getchar(),c>='0'&&c<='9')
ret=ret*10+(c-'0');
ret *=sgn;
return ret;
}
int mysort(int L,int R,int k){ if(L==R){ //区间内只有一个值,即为所求第k大值 return a[L];
}
int key=a[L];
int low=L;
int high=R;
while(low<high){ while(low<high&&a[high]<=key)
high--;
if(low<high)
a[low++]=a[high];
while(low<high&&a[low]>=key)
low++;
if(low<high)
a[high--]=a[low];
}
a[low]=key;
if(low==k) //该基准值即为第k大的元素
return a[low];
else if(low>k)return mysort(L,low-1,k); //舍半逼近
else return mysort(low+1,R,k);
}
int main(){ int n , k;
scanf("%d%d",&n,&k);
for(int i=0;i<n;i++){ a[i]=scan();
}
int ans=mysort(0,n-1,k-1);
printf("%d\n",ans);
return 0;
}

  

最新文章

  1. Oracle碎碎念~1
  2. Lesson 23 A new house
  3. RDBMS DML DDL
  4. In close() at SocketHttpClientConnection in Android
  5. link
  6. wampserver2.5 apache2.4.9:forbidden,本机可以访问,局域网内部能访问。
  7. 基于jQuery的网站首页宽屏焦点图幻灯片
  8. 『重构--改善既有代码的设计』读书笔记----Replace Array with Object
  9. android api 中文 (73)—— AdapterView
  10. codeforces 478B Random Teams
  11. Python 类继承,__bases__, __mro__, super
  12. MVP学习笔记——参考Google官方demo
  13. kali linux 折腾笔记
  14. CCF系列之模板生成系统( 201509-3 )
  15. js数组中的find(), findIndex(), filter(), forEach(), some(), every(), map(), reduce()方法的详解和应用实例
  16. JAVA 数组作为方法参数—传递地址
  17. python基础之迭代器与生成器
  18. js滚动分页原理
  19. 【Nginx】之安装使用和配置SSL支持
  20. Kubernetes基础

热门文章

  1. WPF 控件库——仿制Chrome的ColorPicker
  2. VSCODE 针对调试C语言时一闪而过解决办法
  3. MySQL 学习笔记(二):数据库更新、视图和数据控制
  4. 【AGC013D】Pilling Up dp
  5. Unity---高度解耦和
  6. C# 动态创建实例化泛型对象,实例化新对象 new()
  7. RFC3920
  8. WebApi接口 - 响应输出xml和json 转
  9. python pika简单实现RabbitMQ通信
  10. springcloud整合bus