Cod sursa(job #2999116)

Utilizator CaptnBananaPetcu Tudor CaptnBanana Data 10 martie 2023 15:21:09
Problema Sortare prin comparare Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.96 kb
#include <bits/stdc++.h>

using namespace std;

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

const int N = 5e5 + 1;
int n, a, nh;
int gramada[N];

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

void coboara(int p){
    int fs = 2 * p, fd = 2 * p + 1, bun = p;
    if(fs <= nh && gramada[fs] < gramada[bun])
        bun = fs;

    if(fd <= nh && gramada[fd] < gramada[bun])
        bun = fd;

    if(bun != p){
        swap(gramada[p], gramada[bun]);
        coboara(bun);
    }
}

void adauga(int val){
    gramada[++nh] = a;
    urca(nh);
}

void popescu(){
    g << gramada[1] << ' ';
    swap(gramada[1], gramada[nh]);
    nh--;
    coboara(1);
}

int main(){
    f >> n;
    for(int i = 0; i < n; i++){
        f >> a;
        adauga(a);
    }

    f.close();
    for(int i = n; i; i--)
        popescu();

    g.close();
}