Cod sursa(job #1075366)

Utilizator RampageSergiu Caraian Rampage Data 8 ianuarie 2014 21:44:20
Problema Statistici de ordine Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.78 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 i=ls, j=rd;

    while(i<j)
    {
        while(v[i]<v[rd])
            i++;
        while(v[j]>v[rd])
            j--;
        if(i<j)
            swap(v[i],v[j]);
    }

    swap(v[i],v[rd]);
    return i;
}

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

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

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

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