Pagini recente » Cod sursa (job #92807) | Cod sursa (job #1172119) | Cod sursa (job #2133099) | Cod sursa (job #845400) | Cod sursa (job #695274)
Cod sursa(job #695274)
#include <fstream>
#include <ctime>
#include <cstdlib>
#include<algorithm>
using namespace std;
ifstream in ("sdo.in");
ofstream out ("sdo.out");
const int N = 3000005;
int a[N], n, k;
void citire() {
in >> n >> k;
for (int i = 1; i <= n; ++i)
in >> a[i];
}
int prelucrare(int left, int right) {
int st = left, dr = right, pivot = a[left + (rand() % (right - left + 1) )];
while(true) {
while (a[st] < pivot)
++st;
while (a[dr] > pivot)
--dr;
if (st < dr)
swap(a[st], a[dr]);
else
return dr;
}
return 0;
}
void quicksort(int left, int right, int k) {
if(left == right)
return;
int poz = prelucrare(left, right);
int p = poz - left + 1;
if (p >= k)
quicksort(left, poz, k);
else
quicksort(poz + 1, right, k - p);
}
int main() {
freopen("sdo.in", "r", stdin);
freopen("sdo.out", "w", stdout);
srand(time(0));
citire();
quicksort(1, n, k);
out << a[k];
return 0;
}