Cod sursa(job #2311949)

Utilizator adimiclaus15Miclaus Adrian Stefan adimiclaus15 Data 3 ianuarie 2019 21:47:29
Problema Sortare prin comparare Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.3 kb
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("algsort.in");
ofstream g("algsort.out");
const unsigned int NMAX=500005,INF=2147483648;
unsigned int a[NMAX],aint[4*NMAX],pozitie,n;
void build_aint(unsigned int nod,unsigned int st,unsigned int dr)
{
    if(st==dr)
    {
        aint[nod]=st;
        return;
    }
    unsigned int mij=(st+dr)/2;
    build_aint(2*nod,st,mij);
    build_aint(2*nod+1,mij+1,dr);
    if(a[aint[2*nod]]<a[aint[2*nod+1]])
    {
        aint[nod]=aint[2*nod];
    }
    else
    {
        aint[nod]=aint[2*nod+1];
    }
}
void update(unsigned int nod,unsigned int st,unsigned int dr)
{
    if(st==dr)
    {
        aint[nod]=pozitie;
        return;
    }
    unsigned int mij=(st+dr)/2;
    if(pozitie<=mij)
    {
        update(2*nod,st,mij);
    }
    else
    {
        update(2*nod+1,mij+1,dr);
    }
    if(a[aint[2*nod]]<a[aint[2*nod+1]])
    {
        aint[nod]=aint[2*nod];
    }
    else
    {
        aint[nod]=aint[2*nod+1];
    }
}
int main()
{
    unsigned int i;
    f>>n;
    for(i=1;i<=n;i++)
    {
        f>>a[i];
    }
    build_aint(1,1,n);
    for(i=1;i<=n;i++)
    {
        g<<a[aint[1]]<<" ";
        pozitie=aint[1];
        a[pozitie]=INF;
        update(1,1,n);
    }
    return 0;
}