Cod sursa(job #1979468)

Utilizator RazvanatorHilea Razvan Razvanator Data 10 mai 2017 17:36:00
Problema Sortare prin comparare Scor 20
Compilator cpp Status done
Runda Arhiva educationala Marime 0.91 kb
#include <fstream>

using namespace std;

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

int n,x,aux;
int nh,nrad;
int v[500005],h[500005],poz[500005];

void schimba (int p,int q)
{
    aux=h[p];
    h[p]=h[q];
    h[q]=aux;
    poz[h[p]]=p;
    poz[h[q]]=q;
}

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

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

void sterge(int p)
{
    schimba(p,nh--);
    urca(p);
    coboara(p);
}

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

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