Pagini recente » Cod sursa (job #1337491) | Cod sursa (job #750561) | Cod sursa (job #2103578) | Cod sursa (job #1250321) | Cod sursa (job #1875535)
#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;
q = selectie_aleatoare(a, l, r);
res = q - l + 1;
if (pos == res) return a[q];
if (pos < res) return partitie_aleatoare(a, l, q - 1, pos);
return partitie_aleatoare(a, q + 1, r, pos - res);
}
int main()
{
fscanf(f1, "%d%d", &n, &k);
for (i = 1; i <= n; i++)
fscanf(f1, "%d", &a[i]);
fclose(f1);
fprintf(f2, "%d", partitie_aleatoare(a, 1, n, k));
return 0;
}