Cod sursa(job #2293007)

Utilizator dianamichesaRosu Diana Michesa dianamichesa Data 30 noiembrie 2018 13:31:17
Problema Sortare prin comparare Scor 80
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.98 kb
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("algsort.in");
ofstream g("algsort.out");
const int N = 500001;

int nh,h[N],v[N],n,nr,poz[N];

void schimba(int p,int q)
{
    int aux=h[p];
    h[p]=h[q];
    h[q]=aux;
    poz[h[p]]=p;
    poz[h[q]]=q;
}

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

void coboara(int p)
{
    int fs=2*p,fd=2*p+1,bun=p;
    if(fs<=nh && v[h[fs]]<v[h[bun]])
        bun=fs;
    if(fd<=nh && v[h[fd]]<v[h[bun]])
        bun=fd;
    if(bun!=p){
        schimba(bun,p);
        coboara(bun);
    }
}

void sterge(int p)
{
    schimba(p,nh);
    nh--;
    urca(p);
    coboara(p);
}
int main()
{
    f >> n;
    for(int i = 1; i <= n; i ++) {
        f >> v[i];
        h[++nh] = i;
        poz[i] = nh;
        urca(nh);
    }
    for(int i = 1; i <= n; i ++) {
        g << v[h[1]] << ' ';
        sterge (1);
    }
    return 0;
}