Cod sursa(job #1013034)

Utilizator dunhillLotus Plant dunhill Data 20 octombrie 2013 09:59:40
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.69 kb
#include <fstream>
#include <algorithm>
using namespace std;

#define R (L | 1)
#define L (u << 1)
#define T (u >> 1)

ifstream fin("algsort.in");
ofstream fout("algsort.out");

int i, N;
int H[500001];

inline void upheap(int u) {
	while (u != 1 && H[u] < H[T]) swap(H[u], H[T]), u = T;
}

inline void downheap(int u) {
	swap(H[1], H[N--]);
	while (1) {
		int m = u;
		if (L <= N && H[L] < H[m]) m = L;
		if (R <= N && H[R] < H[m]) m = R;
		if (m == u) 
			break;
		swap(H[u], H[m]);
		u = m;
	}
}

int main() {
	fin >> N;
	for (i = 1; i <= N; ++i) {
		fin >> H[i];
		upheap(i);
	}
	while (N) {
		fout << H[1] << ' ';
		downheap(1);
	}
	fout << '\n';
	return 0;
}