Pagini recente » Cod sursa (job #52080) | Cod sursa (job #1734709) | Cod sursa (job #2890241) | Cod sursa (job #631293) | Cod sursa (job #856255)
Cod sursa(job #856255)
#include <fstream>
#include <time.h>
#include <stdlib.h>
using namespace std;
ifstream in("sdo.in");
ofstream out("sdo.out");
int a[3000010];
void change (int i, int j){
int aux=a[i];
a[i]=a[j];
a[j]=aux;
}
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++;
change(i,j);
}
change(j,p);
return j;
}
int mysecpartition(int a[], int p, int q)
{
int s,pivot;
s=q-p+1;
srand(time(NULL));
pivot=p+(rand()%s);
change(pivot,p);
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);
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 i,k,n;
in>>n>>k;
for(i=1;i<=n;i++) in>>a[i];
out<<select(a,1,n,k);
return 0;
}