Cod sursa(job #2897988)

Utilizator rapidu36Victor Manz rapidu36 Data 5 mai 2022 16:48:49
Problema Sortare prin comparare Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.13 kb
#include <fstream>
#include <algorithm>

using namespace std;

ifstream cin("algsort.in");
ofstream cout("algsort.out");

const int N=500000;

int nh;
int h[N+1],v[N];

void urca(int p)
{
    while (p > 1 && h[p] < h[p/2])
    {
        swap(h[p], h[p/2]);
        p = p/2;
    }
}

void coboara(int p)
{
    int fs = 2*p;
    int fd = 2*p+1;
    int bun = p;
    if (fs <= nh && h[fs] < h[bun])
    {
        bun = fs;
    }
    if (fd <= nh && h[fd] < h[bun])
    {
        bun = fd;
    }
    if (bun != p)
    {
        swap(h[bun], h[p]);
        coboara(bun);
    }
}

void adauga(int val)
{
    h[++nh] = val;
    urca(nh);
}

void sterge(int p)
{
    if (p == nh)
    {
        nh--;
        return;
    }
    h[p] = h[nh--];
    urca(p);
    coboara(p);
}

int main()
{
    int n;
    cin >> n;
    for (int i = 0; i < n; i++)
    {
        int val;
        cin >> val;
        adauga(val);
    }
    for(int i = 0; i < n; i++)
    {
        v[i] = h[1];
        sterge(1);
    }
    for (int i = 0; i < n; i++)
    {
        cout << v[i] << " ";
    }
    return 0;
}