Cod sursa(job #2212003)

Utilizator AndreiDeltaBalanici Andrei Daniel AndreiDelta Data 12 iunie 2018 19:18:20
Problema Statistici de ordine Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.06 kb
#include <iostream>
#include <fstream>
#define Dim 3000000
using namespace std;
ifstream f("sdo.in");
ofstream g("sdo.out");
long Partitie(long,long);
long N,K,Valori[Dim];
bool gata=0;

long Partitie(long st,long dr)
{
    long x=Valori[st],aux;
    st--; dr++;
    while(st<dr)
    {
        do
        {
           dr--;
        }while(Valori[dr]<=x);

        do
        {
            st++;
        }while(Valori[st]>=x);

        if(st<dr)
        {
            aux=Valori[dr];
            Valori[dr]=Valori[st];
            Valori[st]=aux;
        }
        else
            {
                if(K==dr) { g<<x; gata=0;}
                return dr;
            }
    }
}

void Statistici(long start,long stop)
{
    if(start<stop&&gata==1)
    {
        long p=Partitie(start,stop);
        if(K<p&&gata==1)
          Statistici(start,p);
        else
        if(K>p&&gata==1)
          Statistici(p+1,stop);
    }
}

int main()
{
    f>>N>>K;
    for(long i=1;i<=N;i++) f>>Valori[i];
    Statistici(1,N);
    return 0;
}