Pagini recente » Cod sursa (job #965056) | Cod sursa (job #725930) | Cod sursa (job #1680994) | Cod sursa (job #1362833) | Cod sursa (job #481532)
Cod sursa(job #481532)
#include <fstream>
#include <cstdlib>
#include <ctime>
#define nmax 3000005
using namespace std;
ifstream fin ("sdo.in");
ofstream fout ("sdo.out");
int n, k, a [nmax];
int partitionare (int st, int dr)
{
int i=st-1, j=dr+1, piv=a [st+rand()%(dr-st+1)];
while (1)
{
do {++i;} while (a [i] < piv);
do {--j;} while (a [j] > piv);
if (i < j) swap (a [i], a [j]);
else
return j;
}
}
void rez (int st, int dr)
{
if (st < dr)
{
int x=partitionare (st, dr);
if (x >= k) rez (st, x);
else rez (x+1, dr);
}
}
int main ()
{
freopen ("sdo.in", "r", stdin);
freopen ("sdo.out", "w", stdout);
int i;
srand (time (0));
fin>>n>>k;;
for (i=1; i <= n; ++i) fin>>a [i];;
rez (1, n);
fout<<a [k];
return 0;
}