Pagini recente » Cod sursa (job #284055) | Cod sursa (job #2039456) | Cod sursa (job #638438) | Cod sursa (job #883042) | Cod sursa (job #806695)
Cod sursa(job #806695)
#include <iostream>
#include <fstream>
#include <algorithm>
#include <cstdio>
#include <cstring>
using namespace std;
#define maxn 3000010
int N, K;
int A[maxn];
int solve(int left, int right, int position) {
if(left == right) {
return A[left];
}
int mid = (left + right) / 2;
int elem = A[mid];
int pos = left;
swap(A[mid], A[right]);
for(int i=left; i<right; i++) {
if(A[i] <= elem) {
swap(A[i], A[pos]);
pos ++;
}
}
swap(A[pos], A[right]);
if(position <= (pos - left + 1)) {
return solve(left, pos, position);
}
else {
return solve(pos + 1, right, position - (pos - left + 1));
}
}
int main() {
fstream f1, f2;
f1.open("sdo.in", ios::in);
f2.open("sdo.out", ios::out);
f1 >> N >> K;
for(int i=1; i<=N; i++) {
f1 >> A[i];
}
f2 << solve(1, N, K) << '\n';
f1.close(); f2.close();
return 0;
}