Pagini recente » Cod sursa (job #3294032) | Cod sursa (job #3282001) | Cod sursa (job #3142574) | Cod sursa (job #2782025) | Cod sursa (job #935095)
Cod sursa(job #935095)
#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))];
int i = st - 1, j = dr + 1;
while(1)
{
do
{
++i;
}
while (v[i] < piv);
do
{
--j;
}
while (piv < v[j]);
if (i<j)
swap(v[i],v[j]);
else
return j;
}
return 0;
}
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;
}