Pagini recente » Cod sursa (job #2083601) | Cod sursa (job #2151678) | Cod sursa (job #1821423) | Cod sursa (job #2797335) | Cod sursa (job #761882)
Cod sursa(job #761882)
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int n, k, A[3000001];
int i, ls, ld, l, r, ll, lr, temp;
int main()
{
FILE *in = fopen("sdo.in", "r");
FILE *out = fopen("sdo.out", "w");
fscanf(in, "%d %d", &n, &k);
for(i = 0; i < n; i++)
fscanf(in, "%d", &A[i]);
srand(time(NULL));
k--;
ls = 0; ld = n - 1;
do
{
l = ls; r = ld;
ll = 0; lr = -1;
i = l + (rand() % (r - l + 1));
temp = A[i];
A[i] = A[l];
A[l] = temp;
while(l < r)
{
if(A[l] > A[r])
{
temp = A[l];
A[l] = A[r];
A[r] = temp;
temp = ll;
ll = -lr;
lr = -temp;
}
l += ll;
r += lr;
}
i = l;
if(i > k)
{
ld = i - 1;
}
else
{
ls = i + 1;
}
} while(i != k);
fprintf(out, "%d\n", A[k]);
fclose(in);
fclose(out);
return 0;
}