Pagini recente » Cod sursa (job #2936894) | Cod sursa (job #324988) | Cod sursa (job #234602) | Cod sursa (job #1977227) | Cod sursa (job #856213)
Cod sursa(job #856213)
#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[p];
a[p]=aux;
return partition(a,p,q);
}
int select(int a[], int p, int q, int i)
{
int x,d,j;
if(p==q) return a[p];
x=mysecpartition(a,p,q);
// out<<"\n"<<i<<" "<<x<<"\n";
// for(j=p;j<=q;j++) out<<a[j]<<" ";
d=x-p+1;
if(d==i) return a[x];
else if(i<d) return select(a,p,x-1,i);
else if(i>d) return select(a,x+1,q,i-d);
}
int main()
{
// int a[100];
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)<<"\n";
//for(i=1;i<=n;i++) out<<a[i]<<" ";
// out<<rand()<<" ";
// srand ( time(NULL) );
// out<<rand()<<" ";
return 0;
}