Cod sursa(job #935087)
#include <fstream>
#include <iostream>
#include <ctime>
#include <algorithm>
#define NMAX 3000005
using namespace std;
int n,k;
int v[NMAX];
void citire()
{
ifstream fin ("sdo.in");
fin>>n>>k;
for (int i=1; i<=n; ++i)
fin>>v[i];
}
int divide(int st, int dr)
{
int piv = v[st + (rand()%(dr-st+1))];
do
{
while (v[st] < piv)
++st;
while (piv < v[dr])
--dr;
if (st<=dr)
{
swap(v[st],v[dr]);
++st;
--dr;
}
}
while (st<dr);
return dr;
}
void part_sort(int st, int dr, int k)
{
if (st >= dr)
return;
int pivot = divide(st,dr);
int count = pivot - st + 1;
if (count >= k)
part_sort(st, pivot, k);
else
part_sort(pivot+1,dr, k - count);
}
void afisare()
{
ofstream fout ("sdo.out");
fout<<v[k];
}
int main()
{
citire();
srand(time(NULL));
part_sort(1,n,k);
afisare();
return 0;
}