Cod sursa(job #1011394)

Utilizator PsychoAlexAlexandru Buicescu PsychoAlex Data 16 octombrie 2013 20:07:31
Problema Statistici de ordine Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.39 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-1)
        {
            QSort(in, k-1);
            QSort(k+1, sf);
        }
        else
            if(k < p-1)
            {
                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<<'\n'<<a[p - 1]<<'\n';
}

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