Pagini recente » Cod sursa (job #976690) | Cod sursa (job #2049801) | Cod sursa (job #480716) | Cod sursa (job #2361526) | Cod sursa (job #976713)
Cod sursa(job #976713)
#include <fstream>
#include <algorithm>
#include <cstdlib>
#include <ctime>
using namespace std;
int v[3000005];
int alege(int n)
{
int x;
if((n/RAND_MAX))
x=rand()%(n/RAND_MAX);
else
x=0;
return ((x*RAND_MAX)+rand())%n;
}
int k;
int qsort(int st,int dr)
{
if(st>=dr)
return v[st];
int p=alege(dr-st+1)+st;
swap(v[p],v[st]);
int i,j;
for(i=st+1,j=st+1;i<=dr;i++)
if(v[i]<v[st])
{
swap(v[i],v[j]);
j++;
}
swap(v[st],v[j-1]);
if(k==(j-st))
return v[j-1];
else if(k>(j-1-st))
return qsort(j,dr);
else
return qsort(st,j-2);
}
int main()
{
ifstream fin("std.in");
ofstream fout("std.out");
srand(time(0));
int n=0,i;
fin>>n>>k;
for(i=1;i<=n;i++)
fin>>v[i];
fout<<qsort(1,n)<<'\n';
fin.close();
fout.close();
return 0;
}