Cod sursa(job #798776)

Utilizator idomiralinIdomir Alin idomiralin Data 17 octombrie 2012 10:39:31
Problema Statistici de ordine Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.04 kb
# include <cstdio>
# include <cstdlib>
# include <algorithm>

/*void swap(int* a, int* b) 
{    
     int aux = *a; *a = *b; *b = aux;
     }
*/
using namespace std;

int a[3000005], n, k, piv, p;
void quick(int st, int dr)
{
     int i, j, aux = 0;
     
     if (st >= dr) return;
     
     i = st - 1; j = dr;
     
     p = i + rand() % (j -  i + 1);
     piv = a[p];
    
     swap(a[p],a[dr]);
     while (i < j)
     {
           while (i < j && a[i] < piv) i++;
           while (i < j && a[--j] > piv) {} 
           
           if (i < j) swap(a[i],a[j]);
           }
     
     swap(a[dr],a[i]);      

     if (i < k) quick(i + 1, dr);
     else if (i > k) quick(st, i - 1); 
}

int main()
{
    int i;
    
    freopen("sdo.in","r",stdin);
    freopen("sdo.out","w",stdout);
    
    scanf("%d%d",&n,&k);
    for (i = 1; i <= n; i++)
        scanf("%d",&a[i]);
        
    quick(1,n);
    
    printf("%d\n",a[k]);
    
    for (i = 1; i <= n; i++)
        printf("%d ",a[i]);
    
return 0;
}