Cod sursa(job #1075433)

Utilizator RampageSergiu Caraian Rampage Data 8 ianuarie 2014 22:57:57
Problema Statistici de ordine Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.8 kb
#include <cstdlib>
#include <fstream>
using namespace std;

ifstream f("sdo.in");
ofstream g("sdo.out");

int v[3000001],n,k;

int partitie (int ls, int rd)
{
    int p = rand()%(rd-ls+1)+ls;
    swap(v[p],v[rd]);
    int crt = ls;
    for (int i=ls; i<rd; ++i)
    {
        if(v[i]<v[rd])
        {
            swap(v[crt],v[i]);
            crt++;
        }
    }
    swap(v[crt],v[rd]);
    return crt;
}

void sdo(int ls, int rd)
{
    if(ls<rd)
    {
        int p = partitie(ls,rd);
        if(p==k);
        else if (p<k)
            sdo(p+1,rd);
        else sdo(ls,p-1);
    }
}

int main()
{
    f>>n>>k;

    for(int i=1; i<=n; ++i)
        f>>v[i];

    if(n==1)
        g<<v[1];
    else
    {
        sdo(1,n);
        g<<v[k];
    }
    return 0;
}