Cod sursa(job #1054028)

Utilizator naty.claudiuLup Natanael Claudiu naty.claudiu Data 13 decembrie 2013 11:24:18
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.02 kb
#include<fstream>
#define dim 500007
using namespace std;
   
ifstream f("algsort.in");
ofstream g("algsort.out");
int pos[dim],h[2*dim],N,a[dim];
inline int rs(int nod){
    return 2*nod+1;
}
inline int ls(int nod){
    return 2*nod;
}
void urca(int k){
   
    while( k>1 && h[k>>1]>h[k]){
         
        swap(h[k],h[k>>1]);
        k>>=1;
    }
}
void coboara( int nod){
   
    int fiu=nod;
int rss=rs(nod);
int lss=ls(nod);
   
   
    if(lss<=N && h[fiu]>h[lss] ){
        fiu=lss;
   
    }
    if(rss<=N && h[fiu]>h[rss]){
        fiu=rss;
    }
    if(nod!=fiu){
        swap(h[fiu],h[nod]);
        coboara(fiu);
    }
}
void insert(    int X   ){
    h[++N]=X;
    urca(N);
}
   
void erase( int X ){
     
    swap(h[X],h[N]);
    --N;
    coboara(X);
}
int main () {
    int n,x;
    f>>n;
   
    for(int i=1;i<=n;++i){
        f>>x;
        insert(x);
    }
    g<<h[1]<<" ";
    for(int i=2;i<=n;++i){
        erase(1);
        g<<h[1]<<" ";
    }
    return 0;
}