Pagini recente » Cod sursa (job #8458) | Cod sursa (job #449406) | Cod sursa (job #335729) | Cod sursa (job #1864602) | Cod sursa (job #396090)
Cod sursa(job #396090)
#include <stdio.h>
#include <fstream>
#include <time.h>
#include <stdlib.h>
#define NMAX 3000002
using namespace std;
int n,k,A[NMAX];
ifstream in ("sdo.in");
ofstream out ("sdo.out");
void read()
{
in>>n>>k;
int i;
for (i=1; i<=n; i++)
in>>A[i];
}
int part(int A[NMAX],int st,int dr)
{
int i=st-1,j=dr+1,p=A[st+(rand()%(dr-st+1))];
while (1)
{
do
{
++i;
}
while (A[i]<p);
do
{
--j;
}
while (A[j]>p);
if (i<j)
swap(A[i],A[j]);
else
return j;
}
}
void select(int A[NMAX],int st,int dr,int k)
{
if (st==dr)
return ;
int x=part(A,st,dr);
int act=x-st+1;
if (act>=k)
select(A,st,x,k);
else
select(A,x+1,dr,k-act);
}
int main()
{
read();
srand(time(NULL));
select(A,1,n,k);
out<<A[k]<<'\n';
return 0;
}