Cod sursa(job #1830658)

Utilizator mdiannnaMarusic Diana mdiannna Data 16 decembrie 2016 23:09:50
Problema Sortare prin comparare Scor 20
Compilator cpp Status done
Runda Arhiva educationala Marime 1.29 kb
#include <iostream>
#include <fstream>

#define MAX_VAL 500000

using namespace std;
int V[500005];
int minim[1100005];
int M, N;

using namespace std;

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

int stanga(int i){
    return i*2+1;
}

int dreapta(int i){
    return i*2+2;
}

void construieste_arbore(int nod, int st, int dr){
    int m = (st+dr)/2;

    if(st == dr)
        minim[nod] = V[st];
    else{
        construieste_arbore(stanga(nod), st, m);
        construieste_arbore(dreapta(nod), m+1, dr);

        minim[nod] = min(minim[stanga(nod)], minim[dreapta(nod)]);
    }

}


void update_nod2(int nod, int st, int dr, int val_cautata, int val ){
    int m;
    m = (st + dr)/2;

    if(st ==dr){
        minim[nod] = val;
    }
        else{

            if(val_cautata == minim[stanga(nod)])
                update_nod2(stanga(nod), st, m, val_cautata, val);
            else
                update_nod2(dreapta(nod), m+1, dr, val_cautata, val);

            minim[nod] = min(minim[stanga(nod)], minim[dreapta(nod)]);
        }
}




int main()
{

    fin >> N;
    for(int i=0; i<N; i++){
        fin >> V[i];
     }

    construieste_arbore(0, 0, N-1);

    for(int i=0; i<N; i++){
        fout <<  minim[0] << " ";
        update_nod2(0, 0, N-1, minim[0], MAX_VAL);

    }


    return 0;
}