Cod sursa(job #825288)

Utilizator gabipurcaruGabi Purcaru gabipurcaru Data 28 noiembrie 2012 11:12:09
Problema Sortare prin comparare Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.88 kb
#include <fstream>
using namespace std;

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

const int INF  = (1<<29);

int n,x[100010],i,j,a[1000010];


inline int build(int i, int li, int ls) {
    if(li > ls)
        return -INF;

    if(li == ls) {
        a[i] = x[li];
        return a[i];
    }
    
    a[i] = max(
        build(2*i  , li,         (li+ls)/2 ),
        build(2*i+1, (li+ls)/2+1,  ls        )
    );
    return a[i];
}

inline int rem(int i, int li, int ls, int v) {
    if(a[i] != v) {
        return a[i];
    }
    if(li == ls && a[i] == v) {
        a[i] = -INF;
        return a[i];
    }
    return a[i] = max(rem(2*i, li, (li+ls)/2, v), rem(2*i+1, (li+ls)/2+1, ls, v));
}

int main() {
    in>>n;
    for(i=1; i<=n; i++) {
        in>>x[i];
    }
    build(1, 1, n);
    for(i=1; i<=n; i++) {
        out<<a[1]<<' ';
        rem(1, 1, n, a[1]);
    }
    return 0;
}