Cod sursa(job #1011384)

Utilizator PsychoAlexAlexandru Buicescu PsychoAlex Data 16 octombrie 2013 19:59:41
Problema Statistici de ordine Scor 50
Compilator cpp Status done
Runda Arhiva educationala Marime 1.27 kb
#include <iostream>
#include <fstream>

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 i1 = 1, j1 = 0;
    while(in < sf)
    {
        if(a[in] > a[sf])
        {
            change(a[in], a[sf]);

            if(i1 == 1)
            {
                i1 = 0;
                j1 = -1;
            }
            else
            {
                i1 = 1;
                j1 = 0;
            }
        }

        in += i1;
        sf += j1;
    }
    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);
    fout<<a[p - 1]<<'\n';
}

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