Cod sursa(job #1011465)

Utilizator PsychoAlexAlexandru Buicescu PsychoAlex Data 16 octombrie 2013 21:12:29
Problema Statistici de ordine Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 1.26 kb
#include <iostream>
#include <fstream>
#include <stdlib.h>

std::ifstream fin("sdo.in");
std::ofstream fout("sdo.out");

int n, p, position, a[3000001];

void change(int &a, int &b)
{
    int aux = a;
    a = b;
    b = aux;
}

void poz(int in, int sf, int &k)
{
    int random = rand() % (sf - in) + in;

    change(a[random], a[sf]);

    for(int i = in; i < sf; i++)
    {
        if(a[i] <= a[sf]) ///a[sf] - pivot
        {
            change(a[i], a[in]);
            in++;
        }
    }
    change(a[in], a[sf]);
    k = in;
}

void QSort(int in, int sf)
{
    int k;
    if(in < sf)
    {
        poz(in, sf, k);
//        if(k > p)
        {
            QSort(k+1, sf);
        }
//        else
//            if(k < p)
            {
                QSort(in, k-1);
            }
//            else
//            {
//                position = k;
//                return;
//            }
    }
}

void citire()
{
    fin>>n>>p;
    for(int i = 0; i < n; i++)
    {
        fin>>a[i];
    }
}

void rezolvare()
{
    QSort(0, n-1);
//    for(int i = 0; i < n; i++)
//    {
//        std::cout<<a[i]<<' ';
//    }
    fout<<a[p - 1]<<'\n';
}

int main()
{
    citire();
    rezolvare();
    return 0;
}