Cod sursa(job #3213913)

Utilizator andreea_chivuAndreea Chivu andreea_chivu Data 13 martie 2024 16:46:40
Problema Sortare prin comparare Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.1 kb
#include <iostream>
#include <fstream>

using namespace std;

const int NMAX = 5e5+1;
int h[NMAX];

void coboara(int nh, 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){
        swap(h[p], h[bun]);
        coboara(nh, bun);
    }
}

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

void sterge(int& nh, int p){
    if(p == nh){
        nh--;
    }else{
        swap(h[p], h[nh]);
        nh--;
        urca(p);
        coboara(nh, p);
    }
}

void adauga(int& nh, int val){
    nh++;
    h[nh] = val;
    urca(nh);
}

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

    int n;
    fin >> n;

    int nr = 0;
    for(int i = 0; i < n; i++){
        int x;
        fin >> x;
        adauga(nr, x);
    }

    for(int i = n; i >= 1; i--){
        fout << h[1] << " ";
        sterge(nr, 1);
    }

    fin.close();
    fout.close();
    return 0;
}