Pagini recente » Cod sursa (job #2289380) | Cod sursa (job #1104861) | Cod sursa (job #2796307) | Cod sursa (job #1892597) | Cod sursa (job #1830663)
#include <iostream>
#include <fstream>
#define MAX_VAL 2<<31
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;
}