Cod sursa(job #2068836)

Utilizator ioanalexandraIoan Alexandra ioanalexandra Data 18 noiembrie 2017 11:24:52
Problema Algoritmul lui Dijkstra Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.88 kb
#include <bits/stdc++.h>
using namespace std;
ifstream f ("algsort.in");
ofstream g ("algsort.out");
int h[500001],i,j,n,p,x,m=1;
void up(int p)
{
    if(p>1 && h[p/2]>h[p])
    {
        swap(h[p],h[p/2]);
        up(p/2);
    }
}
void add(int x)
{
    h[++m]=x;
    up(m);
}

void down(int p)
{
    if(p*2+1<=m && (h[p*2]<h[p] || h[p*2+1]<h[p]))
    {
        if(h[p*2]<h[p*2+1])
        {
            swap(h[p],h[p*2]);
            down(p*2);
        }
        else
        {
            swap(h[p*2+1],h[p]);
            down(p*2+1);
        }
    }
    else if(p*2<=m && h[p*2]<h[p])
    swap(h[p*2],h[p]);

}
void de(int p)
{
    swap(h[p],h[m]);
    m--;
    up(p);
    down(p);
}
int main()
{
    f>>n>>h[1];
    for(i=2;i<=n;i++)
        f>>x,add(x);
    for(i=1;i<=n;i++)
    {
        g<<h[1]<<" ";
        de(1);
    }

    return 0;
}