Pagini recente » Cod sursa (job #271911) | Cod sursa (job #2276008) | Cod sursa (job #2178363) | Cod sursa (job #1667073) | Cod sursa (job #1741362)
#include <fstream>
#include <ctime>
#include <cstdlib>
using namespace std;
#define MAX_N 3000005
ifstream fin("sdo.in");
ofstream fout("sdo.out");
int A[MAX_N], N, K;
void citire()
{
fin >> N >> K;
for (int i = 1; i <= N; ++i)
fin >> A[i];
}
int part(int A[MAX_N], int li, int lf)
{
int i = li - 1, j = lf + 1, p = A[li + (rand() % (lf - li + 1))];
while (1)
{
do
{
++i;
} while (A[i] < p);
do
{
--j;
} while (p < A[j]);
if (i < j)
swap(A[i], A[j]);
else
return j;
}
return 0;
}
void sel(int A[MAX_N], int li, int lf, int k)
{
if (li == lf)
return;
int q = part(A, li, lf);
int t = q - li + 1;
if (t >= k)
sel(A, li, q, k);
else
sel(A, q + 1, lf, k - t);
}
int main()
{
srand(time(NULL));
citire();
sel(A, 1, N, K);
fout << A[K] << "\n";
}