题目来源:http://codeup.cn/problem.php?cid=100000587&pid=0
题目描述
求第k大的数
给定一个长度为n(1≤n≤1,000,000)的无序正整数序列,以及另一个数k(1≤k≤1,000,000)(关于第k大的数:例如序列{1,2,3,4,5,6}中第3大的数是4。)
输入
第一行两个正整数m,n。
第二行为n个正整数。
输出
第k大的数。
样例输入
6 3 1 2 3 4 5 6
样例输出
4
#include <iostream>
#include <cstring>
#include <fstream>
#include <string>
#include <cmath>
#include <algorithm>
#include <queue>
#include <map>
using namespace std;
#define NMax 1000002
int main()
{
int n,k;
while(~scanf("%d%d", &n, &k)) {
int arr[NMax];
for (int i = 0; i < n; i++) {
scanf("%d", arr + i);
}
int L, LL = 0, RR = n - 1, R;
k=n-k;
while (1) {
L = LL;
R = RR;
int temp = arr[L];
while (L < R) {
while (L<R && temp <= arr[R])R--;
arr[L] = arr[R];
while (L<R && temp >= arr[L])L++;
arr[R] = arr[L];
}
arr[L] = temp;
if (L == k)break;
if (k < L)RR = L - 1;
else LL = L + 1;
}
printf("%d", arr[k]);
}
return 0;
}