Cod sursa(job #2095468)

Utilizator biaiftimeIftime Bianca biaiftime Data 27 decembrie 2017 16:10:13
Problema Sortare prin comparare Scor 80
Compilator cpp Status done
Runda Arhiva educationala Marime 0.95 kb
#include <fstream>
#define Nmax 500002
#define inf 2147483647
using namespace std;
ifstream fin("algsort.in");
ofstream fout("algsort.out");
int a[Nmax],arb[4*Nmax],n;
void Read()
{
    int i;
    fin>>n;
    for(i=1;i<=n;++i)
    fin>>a[i];
}
int Build(int l,int r,int nod)
{
    if(r==l){
        arb[nod]=a[l];
        return arb[nod];
    }
    int val1,val2,mid;
    mid=l+(r-l)/2;
    val1=Build(l,mid,2*nod);
    val2=Build(mid+1,r,2*nod+1);
    arb[nod]=min(val1,val2);
    return arb[nod];
}
void Update()
{
    int i=1;
    while(2*i+1<=4*n&&(arb[2*i]!=0||arb[2*i+1]!=0))
       if(arb[i]==arb[2*i])i=2*i;
       else i=2*i+1;
    arb[i]=inf;
    i=i/2;
    while(i>0){arb[i]=min(arb[2*i],arb[2*i+1]); i=i/2;}
}
void Sortare()
{
    int k=1;
    while(k<=n)
    {
        fout<<arb[1]<<" ";
        Update();
        ++k;
    }
}
int main()
{
    Read();
    Build(1,n,1);
    Sortare();
    return 0;
}