Pagini recente » Cod sursa (job #2426926) | Cod sursa (job #2926319) | Cod sursa (job #477295) | Cod sursa (job #406178) | Cod sursa (job #1851747)
#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;
}