Cod sursa(job #3123981)

Utilizator TODEToderita Mihai TODE Data 26 aprilie 2023 15:59:36
Problema Sortare prin comparare Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.9 kb
#include <fstream>
using namespace std;

ifstream in("algsort.in");
ofstream out("algsort.out");
const int N = 5e5;
int nh , h[N + 1] , n;
void urca(int p){
    while(p > 1 && h[p] < h[p / 2]){
        swap(h[p] , h[p / 2]);
        p /= 2;
    }
}
void adauga(int val){
    h[++nh] = val;
    urca(nh);
}
void coboara(int p){
    int fiu_s = 2 * p , fiu_d = 2 * p + 1 , ok = p;
    if(fiu_s <= nh && h[fiu_s] < h[ok]){
        ok = fiu_s;
    }
    if(fiu_d <= nh && h[fiu_d] < h[ok]){
        ok = fiu_d;
    }
    if(ok != p){
        swap(h[p] , h[ok]);
        coboara(ok);
    }
}
int main(){
    in >> n;
    for(int i = 1 ; i <= n ; i++){
        int x;
        in >> x;
        adauga(x);
    }
    for(int i = n ; i > 1 ; i--){
        swap(h[1] , h[i]);
        nh--;
        coboara(1);
    }
    for(int i = n ; i >= 1 ; i--){
        out << h[i] << ' ';
    }
}