Pagini recente » Cod sursa (job #1923927) | Cod sursa (job #55040) | Cod sursa (job #2083843) | Cod sursa (job #2261915) | Cod sursa (job #1875541)
#include<stdio.h>
#include<stdlib.h>
#include<algorithm>
#define MAX 3000001
using namespace std;
FILE *f1 = fopen("sdo.in", "r");
FILE *f2 = fopen("sdo.out", "w");
int a[MAX], i, n, k;
int selectie_aleatoare(int *a, int l, int r)
{
int q, p, u;
q = a[l + rand() % (r - l + 1)];
p = l - 1;
u = r + 1;
while (0 < 1)
{
do
{
p++;
}while( a[p] <= q);
do
{
u--;
}while( a[u] >= q);
if (p < u) swap(a[p], a[u]);
else return u;
}
}
int partitie_aleatoare(int *a, int l, int r, int pos)
{
int q, res;
if (l == r) return a[l];
q = selectie_aleatoare(a, l, r);
res = q - l + 1;
if (pos <= res) return partitie_aleatoare(a, l, q, pos);
return partitie_aleatoare(a, q + 1, r, pos - res);
}
int main()
{
fscanf(f1, "%d%d", &n, &k);
for (i = 0; i < n; i++)
fscanf(f1, "%d", &a[i]);
fclose(f1);
fprintf(f2, "%d", partitie_aleatoare(a, 0, n - 1, k));
return 0;
}