Pagini recente » Cod sursa (job #13136) | Cod sursa (job #83459) | Cod sursa (job #328106) | Cod sursa (job #2354881) | Cod sursa (job #695244)
Cod sursa(job #695244)
#include <cstdio>
#include <ctime>
#include <cstdlib>
#include<algorithm>
using namespace std;
const int N = 3000005;
int a[N], n, k;
void citire() {
scanf("%d%d", &n, &k);
for (int i = 1; i <= n; ++i)
scanf("%d", &a[i]);
}
int prelucrare(int left, int right) {
int st = left, dr = right, pivot = a[left + (rand() % (right - left + 1) )];
while(true) {
while (st <= right && a[st] < pivot)
++st;
while (dr >= left && 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);
printf("%d\n", a[k]);
return 0;
}