Pagini recente » Cod sursa (job #2794772) | Cod sursa (job #1312097) | Profil linda | Cod sursa (job #2230850) | Cod sursa (job #855833)
Cod sursa(job #855833)
#include <fstream>
#include <time.h>
#include <stdlib.h>
using namespace std;
ifstream in("sdo.in");
ofstream out("sdo.out");
int a[3000010];
int partition(int a[], int p, int q)
{
int x, i, j, aux;
x=a[p];
j=p;
for(i=p+1;i<=q;i++)
if(a[i]<x)
{
j++;
aux=a[i];
a[i]=a[j];
a[j]=aux;
}
aux=a[p];
a[p]=a[j];
a[j]=aux;
return j;
}
int mysecpartition(int a[], int p, int q)
{
int s,pivot,aux;
s=q-p+1;
srand(time(NULL));
pivot=p+(rand()%s);
aux=a[pivot];
a[pivot]=a[1];
a[1]=aux;
return partition(a,p,q);
}
int select(int a[], int p, int q, int i)
{
int x,k;
if(p==q) return a[p];
x=mysecpartition(a,p,q);
k=x-p+1;
if(k==i) return a[x];
else if(i<k) return select(a,p,x-1,i);
else return select(a,x+1,q,i-k);
}
int main()
{
int i,k,n;
in>>n>>k;
for(i=1;i<=n;i++) in>>a[i];
out<<select(a,1,n,k);
// out<<mysecpartition(a,1,n);
// out<<rand()<<" ";
// srand ( time(NULL) );
// out<<rand()<<" ";
return 0;
}