Pagini recente » Cod sursa (job #2624125) | Cod sursa (job #1753032) | Cod sursa (job #2803355) | Cod sursa (job #545322) | Cod sursa (job #736576)
Cod sursa(job #736576)
#include <iostream>
#include <fstream>
#include <algorithm>
using namespace std;
#define NMAX 3000005
int A[NMAX], N, K;
int find(int K){
int left = 0, right = N - 1, mid;
while(left <= right){
mid = left + (right - left) / 2;
swap(A[mid], A[right]);
int pos = left;
for(int i = left; i < right; ++i){
if(A[i] < A[right])
swap(A[i], A[pos++]);
}
swap(A[right], A[pos]);
mid = pos;
int q = (mid - left + 1);
if(q == K)
return A[left+K-1];
if(q > K)
right = mid-1;
else
left = mid+1, K -= (q);
}
return -1;
}
int main(){
ifstream in("sdo.in");
ofstream out("sdo.out");
in >> N >> K;
for(int i = 0; i < N; ++i)
in >> A[i];
out << find(K);
//out << A[K-1] << endl;
return 0;
}