Cod sursa(job #592961)

Utilizator valentin.harsanValentin Harsan valentin.harsan Data 31 mai 2011 17:42:22
Problema Multiplu Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.72 kb
#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;
}