Cod sursa(job #2483732)

Utilizator radustefanezaruEzaru Radu Stefan radustefanezaru Data 30 octombrie 2019 10:15:38
Problema Sortare prin comparare Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.08 kb
#include <bits/stdc++.h>
#define NMAX 500005
#define ll long long
using namespace std;
ifstream f("algsort.in") ;
ofstream g ("algsort.out") ;
ll N, l = 0,  v[2*NMAX], x;

void down (ll p)
{
    if (2*p+1<=l)
    {
        if (v[2*p] < v[2*p+1] && v[2*p] < v[p])
        {
            swap(v[2*p], v[p]) ;
            down(2*p);
        }
        else if (v[2*p+1] < v[p])
        {
            swap(v[2*p+1], v[p]) ;
            down(2*p+1) ;
        }
    }
    else if (2*p <= l && v[2*p] < v[p])
    {
        swap(v[2*p], v[p]) ;
        down (2*p) ;
    }
}
void up (ll p)
{
    if (p > 1 && v[p] < v[p/2])
    {
        swap(v[p],v[p/2]) ;
        up(p/2);
    }
}
void del (ll p)
{
    swap(v[p], v[l]);
    l -- ;
    up(p);
    down(p);
}
void add (ll x)
{
    l ++ ;
    v[l] = x;
    up(l);

}
int main()
{
    f >> N ;
    for (ll i = 1 ; i <= N ; ++i)
    {
        f >> x ;
        add(x) ;
    }

    while (l != 0)
    {
        g << v[1] << ' ';
        del(1) ;

    }

    f.close();
    g.close();
    return 0 ;
}