瑶瑶的第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;
}

  

ACdream 1099——瑶瑶的第K大——————【快排舍半,输入外挂】的更多相关文章

  1. 寻找第K大 网易2016实习研发工程师编程题

    有一个整数数组,请你根据快速排序的思路,找出数组中第K大的数. 给定一个整数数组a,同时给定它的大小n和要找的K(K在1到n之间),请返回第K大的数,保证答案存在. 测试样例: [1,3,5,2,2] ...

  2. ACM_求第k大元素(两次二分)

    求第k大 Time Limit: 6000/3000ms (Java/Others) Problem Description: 给定两个数组A和B,大小为N,M,每次从两个数组各取一个数相乘放入数组C ...

  3. [ACdream 1099] 瑶瑶的第K大

    瑶瑶的第K大 Time Limit: 4000/2000MS (Java/Others) Memory Limit: 256000/128000KB (Java/Others) Problem Des ...

  4. ACdream 1099求第k大

    题目链接 瑶瑶的第K大 Time Limit: 10000/5000MS (Java/Others)Memory Limit: 512000/256000KB (Java/Others) Submit ...

  5. [ACdream]瑶瑶带你玩激光坦克

    题目链接:http://acdream.info/contest?cid=1269#problem-B Problem Description 有一款名为激光坦克的游戏,游戏规则是用一个坦克发出激光来 ...

  6. ACdream 1103 瑶瑶正式成为CEO(树链剖分+费用流)

    Problem Description 瑶瑶(tsyao)是某知名货运公司(顺丰)的老板,这个公司很大,货物运输量极大,因此公司修建了许多交通设施,掌控了一个国家的交通运输. 这个国家有n座城市,公司 ...

  7. ACdream 1104 瑶瑶想找回文串(SplayTree + Hash + 二分)

    Problem Description 刚学完后缀数组求回文串的瑶瑶(tsyao)想到了另一个问题:如果能够对字符串做一些修改,怎么在每次询问时知道以某个字符为中心的最长回文串长度呢?因为瑶瑶整天只知 ...

  8. acdream 瑶瑶带你玩激光坦克 (模拟)

    瑶瑶带你玩激光坦克 Time Limit: 2000/1000MS (Java/Others)    Memory Limit: 256000/128000KB (Java/Others) Submi ...

  9. [LeetCode] Kth Largest Element in an Array 数组中第k大的数字

    Find the kth largest element in an unsorted array. Note that it is the kth largest element in the so ...

随机推荐

  1. ecliplse导入tomcat

    上面点击之后,弹出的窗口最大化: 导入成功之后如下图:

  2. VM12安装Mac系统操作指南

    1.第一步,操作按照这个链接来搞 VMware 12安装Mac OS 系统使用的是 OS X 10.11.1(15B42) 2.激活工具一定要使用 unlocker208 3.初次安装可能存在的报错 ...

  3. CH收藏的书

    论语 道德经 墨子

  4. Atcoder Grand Contest 031C(构造,思维,异或,DFS)

    #include<bits/stdc++.h>using namespace std;int n,a,b,sum;void dfs(int x,int y,int ban){    if( ...

  5. winform datagridview某一列设为自动宽度

    如果用displayedcells只会使看见的数据自动列宽,滚动条往下发现后面的没有自动列宽,所以要用allcells就不会出现这个问题

  6. 【ARC077F】SS kmp+打表找规律

    Description ​ 如果某个串可以由两个一样的串前后连接得到,我们就称之为"偶串".比如说"xyzxyz"和"aaaaaa"是偶串, ...

  7. loj #6122. 「网络流 24 题」航空路线问题

    #6122. 「网络流 24 题」航空路线问题 题目描述 给定一张航空图,图中顶点代表城市,边代表两个城市间的直通航线.现要求找出一条满足下述限制条件的且途经城市最多的旅行路线. 从最西端城市出发,单 ...

  8. requests库和urllib包对比

    python中有多种库可以用来处理http请求,比如python的原生库:urllib包.requests类库.urllib和urllib2是相互独立的模块,python3.0以上把urllib和ur ...

  9. echart在jsp中使用另外的方法

    var chartOutChar = null; var option1 = { tooltip: { trigger: 'axis' }, toolbox: { feature: { dataVie ...

  10. sql 面试题记录

    一张学生表,字段 :学生ID,学生课程,学生成绩 问:每门课程前三名的学生信息? create table student ( id ), --编号 class ),--课程 soure int -- ...