Cod sursa(job #2483740)

Utilizator TrolliciousSir Troll Trollicious Data 30 octombrie 2019 10:29:13
Problema Sortare prin comparare Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.09 kb
#include <iostream>
#include <fstream>
using namespace std;

ifstream f("algsort.in");
ofstream g("algsort.out");

int n;
unsigned long long v[500005];

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

void down(int p)
{
    if(2*p+1<=n)
    {
        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<=n&&v[2*p]<v[p])
    {
        swap(v[p],v[2*p]);
        down(2*p);
    }
}

void add(unsigned long long x,int i)
{
    v[i]=x;
    up(i);
}

void del(int p)
{
    swap(v[n],v[p]);
    n--;
    up(p);
    down(p);
}

void Read()
{
    f>>n;
    int i;
    for(i=1; i<=n; i++)
    {
        int x;
        f>>x;
        add(x,i);
    }
}

void afis()
{
    while(n)
        {
            g<<v[1]<<" ";
            del(1);
        }
}

int main()
{
    Read();
    afis();
    return 0;
}