Cod sursa(job #373358)

Utilizator DraStiKDragos Oprica DraStiK Data 13 decembrie 2009 16:53:37
Problema Statistici de ordine Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.13 kb
#include <algorithm>
using namespace std;

#define DIM 3000005
#define MAX 10005

char buff[MAX];
int n,k,poz;
int a[DIM];

inline void cit (int &nr)
{
    for (nr=0; buff[poz]<'0' || buff[poz]>'9'; )
        if (++poz==MAX)
        {
            fread (buff,1,MAX,stdin);
            poz=0;
        }
    for ( ; '0'<=buff[poz] && buff[poz]<='9'; )
    {
        nr=nr*10+buff[poz]-'0';
        if (++poz==MAX)
        {
            fread (buff,1,MAX,stdin);
            poz=0;
        }
     }
}

void read ()
{
    int i;

    cit (n); cit (k);
    for (i=1; i<=n; ++i)
        cit (a[i]);
}

void qsort (int st,int dr)
{
    int i=st,j=dr,piv=a[(st+dr)/2];

    do
    {
        while (a[i]<piv)
            ++i;
        while (a[j]>piv)
            --j;
        if (i<=j)
            swap (a[i++],a[j--]);
    }
    while (i<=j);
    if (st<=k && k<=j)
        qsort (st,j);
    else if (i<=k && k<=dr)
        qsort (i,dr);
}

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

    read ();
    qsort (1,n);
    printf ("%d",a[k]);

    return 0;
}