Cod sursa(job #1247793)

Utilizator MaarcellKurt Godel Maarcell Data 23 octombrie 2014 21:24:09
Problema Statistici de ordine Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 0.79 kb
#include <iostream>
#include <cstdio>
using namespace std;

int N,K, a[3000050], res;

void find_kth(int k, int r){
    int mid=(1+r)/2,i,rnk=0,t=0;

    for (i=1; i<=r; i++)
        if (a[i]<a[mid])
            rnk++;

    if (rnk==k-1){
        res=a[mid];
        return;
    }
    if (rnk>k-1){

        for (i=1; i<=r; i++)
        if (a[i]<a[mid])
            a[++t]=a[i];
        find_kth(k,t);
        return;
    }

    for (i=1; i<=r; i++)
        if (a[i]>a[mid])
            a[++t]=a[i];
    find_kth(k-rnk-1,t);
}

int main(){
    freopen("sdo.in","r",stdin);
    freopen("sdo.out","w",stdout);
    scanf("%d %d\n",&N,&K);

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

    find_kth(K,N);
    printf("%d",res);

    return 0;
}