Cod sursa(job #2068733)

Utilizator catalina200029Olteanu Catalina catalina200029 Data 18 noiembrie 2017 10:44:28
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.89 kb
#include <bits/stdc++.h>

using namespace std;

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

int n,h[500005],k;

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

void add(int x) {
    h[++k]=x;
    up(k);
}

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

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

int main() {
    int i,x;
    f>>n;
    for (i=1;i<=n;i++) {
        f>>x;
        add(x);
    }
    for (i=1;i<=k;i++) {
        g<<h[1]<<' ';
        del(1);
    }
    return 0;
}