Pagini recente » Cod sursa (job #399817) | Cod sursa (job #2745311) | Cod sursa (job #525800) | Cod sursa (job #1916035) | Cod sursa (job #592961)
Cod sursa(job #592961)
#include<stdio.h>
int h[2000000],nr,n;
void swap(int &a,int &b) {
int t=a;
a=b;
b=t;
}
void urca(int p) {
if(p==1 || h[p/2]<=h[p])
return;
swap(h[p],h[p/2]);
urca(p/2);
}
void hpush(int x) {
h[++n]=x;
urca(n);
}
void cob(int p) {
int fs=2*p,fd=fs+1,pmin=p;
if(fs<=n && h[fs]<h[pmin])
pmin=fs;
if(fd<=n && h[fd]<h[pmin])
pmin=fd;
if(pmin!=p) {
swap(h[p],h[pmin]);
cob(pmin);
}
}
void hpop() {
swap(h[1],h[n--]);
cob(1);
}
int main() {
int i,a;
freopen("heap.in","r",stdin);
freopen("heap.out","w",stdout);
scanf("%d",&nr);
for(i=1;i<=nr;++i) {
scanf("%d",&a);
hpush(a);
}
for(i=1;i<=nr;++i) {
printf("%d ",h[1]);
hpop();
}
return 0;
}