Cod sursa(job #1075324)

Utilizator RampageSergiu Caraian Rampage Data 8 ianuarie 2014 21:05:12
Problema Statistici de ordine Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 0.96 kb
#include <cstdlib>
#include <ctime>
#include <fstream>
using namespace std;

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

int v[3000001];

int partitie (int ls, int rd)
{
    srand(time(0));
    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<j)
            i++;
        while(v[j]>v[rd] && i<j)
            j--;
        if(i<j)
            swap(v[i],v[j]);
    }

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

int sdo(int ls, int rd, int k)
{
    if(k==ls)
        return v[ls];
    else if (ls<rd)
    {
        int p = partitie(ls,rd);
        if(k==p)
            return v[p];
        else if (k<p)
            return sdo(ls,p-1,k);
        else if (k>p)
            return sdo(p+1,rd,k);
    }
}

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

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

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