Pagini recente » Cod sursa (job #1040888) | Cod sursa (job #321090) | Cod sursa (job #2377990) | Cod sursa (job #557085) | Cod sursa (job #2482015)
#include <iostream>
#include <fstream>
#define DIM 3000002
#define INF 0xFFFFFFFF
using namespace std;
int N, K;
int array[DIM];
int partition(int left, int right) {
int element = array[right];
int i = left;
for (int j = left; j < right; ++ j) {
if (array[j] <= element) {
swap(array[i], array[j]);
++i;
}
}
swap(array[i], array[right]);
return i;
}
int kthSmallest(int left, int right, int k) {
while (k > 0 && k <= right - left + 1) {
int pos = partition(left, right);
if (pos - left + 1 == k) {
return array[pos];
} else if (pos - left + 1 > k) {
right = pos - 1;
} else {
// pos - left < k
k -= (pos - left + 1);
left = pos + 1;
}
}
return -5;
}
int main() {
ifstream fin("sdo.in");
ofstream fout("sdo.out");
fin >> N >> K;
for (int i = 1; i <= N; i ++) {
fin >> array[i];
}
int result = kthSmallest(1, N, K);
fout << result << '\n';
fin.close();
fout.close();
}