Cod sursa(job #2897987)

Utilizator RaresCelescuRares Celescu RaresCelescu Data 5 mai 2022 16:48:48
Problema Sortare prin comparare Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.06 kb
#include <fstream>
#include <algorithm>

using namespace std;

ifstream cin("algsort.in");
ofstream cout("algsort.out");

const int N=500000;

int nh;
int h[N+1],v[N];

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

void coboara(int p)
{
    int fs=2*p;
    int fd=2*p+1;
    int 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[bun],h[p]);
        coboara(bun);
    }
}

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

void sterge(int p)
{
    if(p==nh)
    {
        nh--;
        return;
    }
    h[p]=h[nh--];
    urca(p);
    coboara(p);
}

int main()
{
    int n;
    cin>>n;
    for(int i=0;i<n;i++)
    {
        int val;
        cin>>val;
        adauga(val);
    }
    for(int i=0;i<n;i++)
    {
        v[i]=h[1];
        sterge(1);
    }
    for(int i=0;i<n;i++)
    {
        cout<<v[i]<<" ";
    }
    return 0;
}