Cod sursa(job #1851747)

Utilizator mdiannnaMarusic Diana mdiannna Data 19 ianuarie 2017 23:58:39
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.34 kb
#include <iostream>
#include <fstream>
#include <climits>


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

using namespace std;

FILE *fin = fopen("algsort.in", "r");
FILE *fout = fopen("algsort.out", "w");

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()
{
    fscanf(fin, "%d", &N);
    for(int i=0; i<N; i++){
        fscanf(fin, "%d", &V[i]);
     }

    construieste_arbore(0, 0, N-1);

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

    }

    return 0;
}