Cod sursa(job #1372952)

Utilizator nicol.bolasNicol Bolas nicol.bolas Data 4 martie 2015 15:58:55
Problema Statistici de ordine Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.81 kb
#include<fstream>
#include<cstdlib>
#include<ctime>
using namespace std;
#define NMAX 3000005
ifstream fin("sdo.in");
ofstream fout("sdo.out");
int n,k,a[NMAX];
int quicksort(int st, int dr)
{
    int i=0,j=1,piv=rand()%(dr-st+1)+st,aux;
    aux=a[piv], a[piv]=a[st], a[st]=aux;
    while (st<dr)
    {
        if (a[st]>a[dr])
        {
            aux=a[st], a[st]=a[dr], a[dr]=aux;
            i=1-i, j=1-j;
        }
        st+=i, dr-=j;
    }
    return st;
}
int sdo(int st, int dr)
{
    int mij=quicksort(st,dr);
    if (mij==k)
        return a[mij];
    if (mij<k)
        return sdo(mij+1,dr);
    else
        return sdo(st,mij-1);
}
int main()
{
    int i;
    srand(time(0));
    fin>>n>>k;
    for (i=1;i<=n;++i)
        fin>>a[i];
    fout<<sdo(1,n)<<"\n";
    return 0;
}