Cod sursa(job #2037676)

Utilizator mmdretroMihai Dretcanu mmdretro Data 12 octombrie 2017 17:09:40
Problema Statistici de ordine Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.43 kb
#include <iostream>
#include <fstream>

using namespace std;

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

unsigned long v[4100000], n, k, V_K;

void citire(unsigned long& n, unsigned long& k)
{
    unsigned long i;
    fin>>n>>k;
    for(i=1;i<=n;i++)
    {
        fin>>v[i];
    }
}

void quicksort(unsigned long x1, unsigned long x2,unsigned long& V_K)
{
    unsigned long i, aux, x3=x2, med;
    med=x1+(x2-x1)/2;
    aux=v[med];
    v[med]=v[x3];
    v[x3]=aux;
    for(i=x1;i<=x3;i++)
    {
        if(v[i]>v[x3])
        {
           aux=v[x3];
           v[x3]=v[x3-1];
           v[x3-1]=aux;
           if(x3!=i+1)
           {
           aux=v[x3];
           v[x3]=v[i];
           v[i]=aux;
           }
           i=i-1;
           x3=x3-1;
        }
    }
    if(x3==k)
    {
        V_K=v[x3];
    }
    else
    {
        if(x3>k)
        {
            if(x3-x1>=2)
            {
                quicksort(x1, x3-1, V_K);
            }
            else
            {
                V_K=v[x3-1];
            }
        }
        if(x3<k)
        {
            if(x2-x3>=2)
            {
                quicksort(x3+1, x2, V_K);
            }
            else
            {
                V_K=v[x3+1];
            }
        }
    }
}
void afisare(unsigned V_k)
{
    fout<<V_k;
}
int main()
{
    citire(n, k);
    quicksort(1, n, V_K);
    afisare(V_K);
}