Cod sursa(job #2785476)

Utilizator Rares5000Baciu Rares Rares5000 Data 18 octombrie 2021 19:14:06
Problema Sortare prin comparare Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.09 kb
#include <fstream>
#include <iostream>

using namespace std;

ifstream fin("algsort.in");
ofstream fout("algsort.out");
int a[500002], n;

void Insert(int x, int poz)
{
    a[poz] = x;
    while(a[poz / 2] > a[poz])
    {
        swap(a[poz / 2], a[poz]);
        poz /= 2;
    }
}

void Delete()
{
    int poz = 1, minim = 2e9;
    a[poz] = a[n--];
    minim = min(a[2 * poz], a[2 * poz + 1]);
    while(a[poz] > minim)
    {
        if(a[2 * poz] == minim)
        {
            swap(a[poz], a[2 * poz]);
            poz = poz * 2;
        }
        else
        {
            swap(a[poz], a[2 * poz + 1]);
            poz = poz * 2 + 1;
        }
        if(2 * poz + 1 <= n)
            minim = min(a[2 * poz], a[2 * poz + 1]);
        else
            if(2 * poz <= n)
                minim = a[2 * poz];
        else return;
    }
}

int main()
{
    int i, x;
    fin >> n;
    for(i = 1; i <= n; i++)
    {
        fin >> x;
        Insert(x, i);
    }
    while(n > 0)
    {
        fout << a[1] << " ";
        Delete();
    }
    return 0;
}