题目描述
输入 n(1≤n<5000000 且 n 为奇数)个数字 ai(1≤ai<109),输出这些数字的第 k 小的数。最小的数是第 0 小。
请尽量不要使用 nth_element
来写本题,因为本题的重点在于练习分治算法。
输入格式
无
输出格式
无
注意
本题在提交的时候发现单纯使用cin和cout会出现tle,所以得对两者进行优化。或者使用scanf和printf
输入输出样例
输入
5 1
4 3 2 1 5
输出
2
#include <iostream>
#include <algorithm>
using namespace std;
const int maxn = 5000005;
int arr[maxn];
int main(void)
{
ios::sync_with_stdio(false);
cin.tie(0);
//以上两行代码用来优化cin和cout
int n, k;
cin >> n >> k;
for (int i = 0; i < n; i++)
cin >> arr[i];
nth_element(arr, arr + k, arr + n);
cout << arr[k];
}