Cod sursa(job #2068736)

Utilizator LusianoStan Lucian Mihai Lusiano Data 18 noiembrie 2017 10:45:59
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.83 kb
#include <iostream>
#include <fstream>
#define NMAX 500050
using namespace std;
ifstream fin("algsort.in");
ofstream fout("algsort.out");
int n,m,h[NMAX];
void add(int);
void citire(){
    fin>>m;int x;
    for(int i=1;i<=m;i++) {fin>>x; add(x);}
}
void up(int p){
    if(p>1&&h[p/2]>h[p]){
        swap(h[p],h[p/2]);
        up(p/2);
    }
}
void down(int p){
    if(p*2+1<=n&&(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<=n&&h[p*2]<h[p]) swap(h[p],h[p*2]);
}
void del(int p){
    swap(h[p],h[n]);
    n--;
    up(p);
    down(p);
}
void add(int x){
    h[++n]=x;
    up(n);
}
int main()
{
    citire();
    for(int i=1;i<=m;i++){
        fout<<h[1]<<" ";
        del(1);
    }
    return 0;
}