- 總時間限制:
- 10000ms
- 內存限制:
- 3000kB
- 描述
-
小張需要從一批數量龐大的正整數中挑選出第k小的數,因爲數據量太龐大,挑選起來很費勁,希望你能編程幫他進行挑選。
- 輸入
- 第一行第一個是數據的個數n(10<=n<=106),第二個是需要挑選出的數據的序號k(1<=k<=105),n和k以空格分隔;
第二行以後是n個數據T(1<=T<=109),數據之間以空格或者換行符分隔。 - 輸出
- 第k小數(如果有相同大小的也進行排序,例如對1,2,3,8,8,第4小的爲8,第5小的也爲8)。
- 樣例輸入
-
10 5 1 3 8 20 2 9 10 12 8 9
- 樣例輸出
-
8
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main(){
int n, k, input, n1, n2;
vector<int> vec;
cin >> n >> k;
--k;
n1 = n;
n2 = n;
for (int i = 0; i <= n/100000; ++i){
n2 = n1 > 100000 ? 100000 : n1;
for (int j = 0; j < n2; ++j){
cin >> input;
vec.push_back(input);
}
sort(vec.begin(), vec.end());
vec.erase(vec.begin() + k, vec.end());
n1 -= n2;
if (n1 <= 0){
cout << vec[k];
break;
}
}
}