Cod sursa(job #856949)

Utilizator alinaelenaFMI Colceag Alina alinaelena Data 17 ianuarie 2013 08:59:26
Problema Statistici de ordine Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.95 kb
#include<cstdio>
#include<cstdlib>
#include<ctime>
#include<string.h>

using namespace std;
int v[300001],k,cont;
int n;
using namespace std;



int partitionare(int st,int dr)
{
 int pivot,p,i,j,aux;
 p=st+(rand()%(dr-st+1));
 pivot=v[p];
 i=st-1;
 j=dr+1;
 while(1)
  {
   do{ i++; } while(v[i]<pivot);
   do{ j--; } while(v[j]>pivot);
   if(i<j)
    {
     aux=v[i];
     v[i]=v[j];
     v[j]=aux;
    }
   else
    return j;
  }
}

void sort(int st,int dr,int k)
{
 int partitie,cont;
 while(st<dr)
  {
   partitie=partitionare(st,dr);
   cont=partitie-st+1;
   if (cont>=k) 
	   st=cont;
   else
	   { dr=cont+1; k-=cont; }
    }
}		

void read()
{
	int i;
	scanf("%d",&n,&k);
	for (i=1;i<=n;++i)
		scanf("%d",&v[i]);
}

void write()
{
	printf("%d",v[k]);
	
}




int main()
{
	freopen("sdo.in","r",stdin);
	freopen("sdo.out","w",stdout);
	read();
	srand(time(NULL));
	sort(1,n,k);
	write();
}