Cod sursa(job #1016022)

Utilizator smaraldaSmaranda Dinu smaralda Data 25 octombrie 2013 16:21:37
Problema Statistici de ordine Scor 30
Compilator cpp Status done
Runda Arhiva educationala Marime 0.8 kb
#include<stdio.h>
#include<stdlib.h>

int k,a[3000010];

void swap (int &x, int &y) {
    int aux = x;
    x = y;
    y = aux;
}

void ord (int st, int dr) {
    if(st >= dr)
        return ;
    int pivot,i,j;
    pivot = (st + dr) / 2;

    i = st;
    j = dr;
    while(i <= j) {
        while(a[i] < a[pivot])
            i++;
        while(a[j] > a[pivot])
            j--;
        if(i <= j)
            swap(a[i],a[j]),
            ++i,
            --j;
        }

    if(k <= j)
        ord(st, j);
    else
        ord(i,dr);
}

int main() {
    freopen("sdo.in","r",stdin);
    freopen("sdo.out","w",stdout);
    int n,i;

    scanf("%d%d",&n,&k);
    for(i = 1; i <= n; i++)
        scanf("%d",&a[i]);

    ord(1,n);

    printf("%d\n",a[k]);
    return 0;
}