Pagini recente » Cod sursa (job #2965313) | Cod sursa (job #1326411) | Cod sursa (job #2122165) | Cod sursa (job #2964270) | Cod sursa (job #1033297)
#include<iostream>
#include<fstream>
#include<ctime>
using namespace std;
int x[3000001], n, k, prec = 0;
ifstream f ("sdo.in");
ofstream g ("sdo.out");
void interschimba (int &x, int &y)
{
int aux = x;
x = y;
y = aux;
}
void partitioneaza (int s, int d)
{
if (s < d)
{
int i = s, j = d, poz = rand() % (d - s) + s, m;
if (x[poz] == prec)
if (poz + 1 <= d)
poz++;
else
poz--;
prec = m = x[poz];
do
{
while (x[i] < m)
i++;
while (x[j] > m)
j--;
if (i <= j)
{
if (i == poz)
poz = j;
else
if (j == poz)
poz = i;
interschimba(x[i],x[j]);
i++;
j--;
}
} while (i <= j);
if (poz == k)
{
g << x[poz];
g.close();
return;
}
else
if (k < poz)
partitioneaza (s, poz);
else
partitioneaza (poz, d);
}
}
void main ()
{
srand (time(NULL));
f >> n >> k;
for (int i = 1; i <= n; i++)
f >> x[i];
f.close();
partitioneaza(1, n);
}