Cod sursa(job #2068708)

Utilizator nicholascantarNicholas David Cantar Gogitidze nicholascantar Data 18 noiembrie 2017 10:37:10
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.93 kb
#include <fstream>

using namespace std;
long long h[500010],i,n,m;
void up(int p)
{
    if(p>1&&h[p/2]>h[p])
    {
        swap(h[p],h[p/2]);
        up(p/2);
    }
}
void down(int p)
{
    if(p*2+1<=n&&(h[p*2]<h[p]||h[p*2+1]<h[p]))
    {
        if(h[p*2+1]<h[p*2])
        {
            swap(h[p],h[p*2+1]);
            down(p*2+1);
        }
        else
        {
            swap(h[p],h[p*2]);
            down(p*2);
        }
    }
    else if(p*2<=n&&h[p*2]<h[p])
    {
        swap(h[p],h[p*2]);
    }
}
void adaug (int x)
{
    h[++n]=x;
    up(n);
}
void del(int p)
{
    swap(h[p],h[n--]);
    up(p);
    down(p);
}
int main()
{
    ifstream fin ("algsort.in");
    ofstream fout ("algsort.out");
    fin>>m;
    int x;
    for(i=1;i<=m;i++)
    {
        fin>>x;
        adaug(x);
    }
    for(i=1;i<=m;i++)
    {
        fout<<h[1]<<" ";
        del(1);
    }
    return 0;
}