Pagini recente » Cod sursa (job #2308415) | Cod sursa (job #1571701) | Cod sursa (job #2507972) | Cod sursa (job #2883395) | Cod sursa (job #2654504)
#include <iostream>
#include <fstream>
#include <stdlib.h>
#include <time.h>
#define NMAX 3000005
using namespace std;
int v[NMAX], n, k;
int partition(int begin, int end) {
int p = rand() % (end - begin + 1) + begin;
swap(v[begin], v[p]);
p = v[p];
int j = begin;
for (int i = begin + 1;i <= end;++i) {
if (v[i] <= p) swap(v[++j], v[i]);
}
swap(v[begin], v[j]);
return j;
}
int kth_elem(int k) {
--k;
int i = 0, j = n - 1;
while (true) {
int p = partition(i, j);
if (p == k)
return v[p];
if (p < k)
i = p + 1;
else j = p - 1;
}
}
int main() {
srand(time(NULL));
ifstream fin("sdo.in");
ofstream fout("sdo.out");
fin >> n >> k;
for (int i = 0;i < n;++i)
fin >> v[i];
fout << kth_elem(k);
return 0;
}