Cod sursa(job #1035422)

Utilizator cbiancaCojocaru Bianca cbianca Data 18 noiembrie 2013 16:04:51
Problema Statistici de ordine Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.72 kb
#include<cstdio>
#include<cstdlib>
#define Nmax 3000005
using namespace std;
 
int a[Nmax],n,k;
  
int piv(int s,int d)
{
    int i=s-1,j=d+1,p;
    p=a[s+rand()%(d-s+1)];
    while(true)
    {   while(a[++i]<p);
        while(a[--j]>p);
        if(i<j) a[i]=a[i]+a[j]-(a[j]=a[i]);
          else return j;
    }
    return 0;
}
void quick(int s,int d)
{
    if(s<d)
    {
        int m=piv(s,d);
        if(k<m) quick(s ,m);
          else quick(m+1 ,d);
    }
}
int main () 
{
    freopen("sdo.in","rt",stdin);
    freopen("sdo.out","wt",stdout);
    scanf("%d",&n); 
    scanf("%d",&k);
    for(register int i=1;i<=n;++i) scanf("%d",&a[i]);
    quick(1,n);
    printf("%d\n",a[k]);
    return 0;
}