Cod sursa(job #373484)

Utilizator Bogdan_CCebere Bogdan Bogdan_C Data 13 decembrie 2009 21:42:27
Problema Statistici de ordine Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.82 kb
#include<cstdio>
#include<time.h>
#include<cstdlib>
using namespace std;
int a[3000003];
int partition(int *a,int p,int r)
 { int i=p-1;
   int j=r+1;
   int x=a[rand()%(r-p+1)+p];
   while(2)
    {do
      {++i;}while(a[i]<x);
      do
       {--j;} while(a[j]>x);
      if(i<j)
        {int aux=a[i];a[i]=a[j];a[j]=aux;}
       else return j;       
           
           }
           
return 0;
}
void quick(int *a,int p,int r,int k)   
{if(p<r)
  {int q=partition(a,p,r);
int  temp=q-p+1;
         if(temp<k)  quick(a,q,r,k-temp);
         else  quick(a,p,q-1,k);
        }
     }
int main()
{int n,k;
srand(time(NULL));
freopen("sdo.in","r",stdin);
freopen("sdo.out","w",stdout);
scanf("%d %d",&n,&k);

for(int i=1;i<=n;i++) scanf("%d",&a[i]);
quick(a,1,n,k);
printf("%d",a[k]);
    return 0;}