Pagini recente » Cod sursa (job #1333138) | Cod sursa (job #740967) | Cod sursa (job #417872) | Cod sursa (job #3174450) | Cod sursa (job #484748)
Cod sursa(job #484748)
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
long a[3000010], n, k, i;
void swap(long p1, long p2) {
long m = a[p1];
a[p1] = a[p2];
a[p2] = m;
}
void rec(long in1, long in2, long nr) {
long poz = rand() % (in2 - in1 + 1) + in1, num = 0, in4 = 0;
if (in1 == in2) {
printf("%ld", a[in1]);
exit(0);
}
for (long i = in1; i <= in2; ++i) {
if (a[i] < a[poz]) {
++num;
}
}
swap(poz, in1 + num);
in4 = in1 + num + 1;
for (long i = in1; i <= in1 + num - 1; ++i) {
while (a[i] > a[in1 + num]) {
swap(i, in4++);
}
}
if( num + 1 == nr)
{
printf("%d\n",a[ poz ]);
return ;
}
if (num < nr)
rec(in1 + num + 1, in2, nr - num - 1);
else
rec(in1, in1 + num, nr);
}
int main() {
srand(100);
freopen("sdo.in", "r", stdin);
freopen("sdo.out", "w", stdout);
scanf("%ld %ld", &n, &k);
for (i = 1; i <= n; ++i) {
scanf("%ld", &a[i]);
}
rec(1, n, k);
return 0;
}