Cod sursa(job #2085390)

Utilizator FredyLup Lucia Fredy Data 10 decembrie 2017 01:47:20
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.14 kb
#include <bits/stdc++.h>

using namespace std;

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

#define lim 500010
int n,heap[lim],k;

void up (int nod)
{
    if (nod>1 && heap[nod]<heap[nod/2])
    {
        swap (heap[nod], heap[nod/2]);
        up (nod/2);
    }
}

void adauga (int nod)
{
    heap[++k]=nod;
    up(k);
}

void down (int nod)
{
    if (2*nod+1 <= n && (heap[2*nod]<heap[nod] || heap[2*nod+1]<heap[nod]))
        if (heap[2*nod] < heap[2*nod+1])
        {
            swap (heap[nod], heap[2*nod]);
            down(2*nod);
        }
        else
        {
            swap (heap[nod], heap[2*nod+1]);
            down(2*nod+1);
        }
    else
        if (2*nod<=n && heap[2*nod]<heap[nod])
            swap (heap[nod], heap[2*nod]);
}

void sterge (int nod)
{
    swap (heap[nod], heap[n]);
    n--;
    up(nod);
    down(nod);
}

int main()
{
    int x;
    fin>>n;
    for (int i=1; i<=n; i++)
    {
        fin>>x;
        adauga(x);
    }
    for (int i=1; i<=k; i++)
    {
        fout<<heap[1]<<' ';
        sterge(1);
    }
    fout.close();
    return 0;
}