Pagini recente » Cod sursa (job #2249061) | Cod sursa (job #1702337) | Cod sursa (job #650096) | Cod sursa (job #832117) | Cod sursa (job #1875546)
#include<fstream>
#include<algorithm>
#define MAX 3000001
using namespace std;
ifstream fin("sdo.in");
ofstream fout("sdo.out");
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()
{
fin>>n>>k;
for (i = 0; i < n; i++)
fin>>a[i];
fin.close();
fout<<partitie_aleatoare(a, 0, n - 1, k);
fout.close();
return 0;
}