博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ACdream 1099——瑶瑶的第K大——————【快排舍半,输入外挂】
阅读量:4632 次
发布时间:2019-06-09

本文共 1295 字,大约阅读时间需要 4 分钟。

 

 

瑶瑶的第K大
Time Limit:2000MS     Memory Limit:128000KB     64bit IO Format:%lld & %llu
Submit     

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 25 4 1 3 1

Sample Output

4

Hint

如2,2,1中三个数字中第一大数字为2,第二大数字也为2,第三大数字为1 。
 
 
 
 
解题思路:
   手打快排,方向性、目的性地选择区间分治,输入外挂优化。
 

 

#include
#include
#include
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
=key) low++; 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

  

转载于:https://www.cnblogs.com/chengsheng/p/4372946.html

你可能感兴趣的文章
从输入url到页面返回到底发生了什么
查看>>
form提交时,传递额外的参数
查看>>
题目1201:二叉排序树
查看>>
【科技】线性异或方程组的相关
查看>>
[Bada开发]API官方学习2-风格
查看>>
Ruby: 获取IE的一些信息(其实应用AutoIt脚本本身,获取这些信息更加简单)
查看>>
微信小程序之动态获取元素宽高
查看>>
request.setAttribute
查看>>
HDU 1281 二分图
查看>>
CF2.C
查看>>
NYOJ 832 DP
查看>>
Beta版本发布
查看>>
表单提交验证方法
查看>>
JS框架设计读书笔记之-核心模块
查看>>
实验二
查看>>
bind(),call(), apply()方法的区别是什么?
查看>>
android--开机启动--在某些机型上开机不能启动的问题
查看>>
通过 Storyboard 快速搭建一系列连贯性的视图控制器
查看>>
2-3 Sass的函数功能-列表函数
查看>>
更改oracle字符集 error: ora-12712 解决方法
查看>>