Pagini recente » Cod sursa (job #345302) | Cod sursa (job #1492993) | Cod sursa (job #183349) | Cod sursa (job #56921) | Cod sursa (job #359638)
Cod sursa(job #359638)
#include <fstream>
#define MaxN 500001
using namespace std;
int N, H[MaxN];
fstream fin ("algsort.in",ios::in);
fstream fout ("algsort.out",ios::out);
inline int l_son(int x){
return 2*x;
};
inline int r_son(int x){
return 2*x + 1;
};
inline int father(int x){
return x/2;
};
void sus_heap(int poz, int val){
while (H[father(poz)] > val && father(poz) > 0){
H[poz] = H[father(poz)];
poz = father(poz);
}
H[poz] = val;
};
void jos_heap(int poz, int val){
int fiu;
bool modif = false;
do {
modif = false;
fiu = poz;
if ( l_son(poz) <= N){
if ( l_son(poz) <= N && H[l_son(poz)] < val)
fiu =l_son(poz);
if (r_son(poz) <= N && H[r_son(poz)] < val){
if (fiu == l_son(poz) ){
if ( H[fiu] > H[r_son(poz)] ) fiu = r_son(poz);
}
else fiu = r_son(poz);
};
};
if (fiu != poz) modif = true;
H[poz] = H[fiu];
poz = fiu;
}
while (modif);
H[poz] = val;
};
int main(){
fin>>N;
for (int i = 1; i <= N; i++){
fin>>H[i];
sus_heap(i, H[i]);
};
for (; N>=1; --N){
fout<<H[1]<<" ";
H[1] = H[N];
jos_heap(1,H[1]);
};
}