Pagini recente » Cod sursa (job #965123) | Cod sursa (job #1987386) | Cod sursa (job #2572269) | Cod sursa (job #221323) | Cod sursa (job #1830685)
#include <iostream>
#include <fstream>
#define MAX_VAL (1LL<<31)
#define ll long long
using namespace std;
long long V[500005];
long long minim[1100005];
long long 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, ll val_cautata, ll 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, "%lld", &N);
for(int i=0; i<N; i++){
fscanf(fin, "%lld", &V[i]);
}
construieste_arbore(0, 0, N-1);
for(int i=0; i<N; i++){
fprintf(fout, "%lld ", minim[0]);
update_nod2(0, 0, N-1, minim[0], MAX_VAL);
}
return 0;
}