Pagini recente » Cod sursa (job #2822276) | Cod sursa (job #2687509) | Cod sursa (job #2161502) | Cod sursa (job #417411) | Cod sursa (job #2931148)
#include <bits/stdc++.h>
#define N 500005
#define get_byte(x) ((x >> (8 * byte)) & 255)
using namespace std;
ifstream f("algsort.in");
ofstream g("algsort.out");
int n;
int hp[N];
void read() {
f>>n;
for(int i = 1;i <= n;++i) {
f>>hp[i];
}
}
void swap(int i, int j) {
hp[i] ^= hp[j];
hp[j] = hp[i] ^ hp[j];
hp[i] ^= hp[j];
}
void update(int heap_size, int position) {
int left = 2 * position;
int right = 2 * position + 1;
int winner = position;
if(left <= heap_size && hp[left] > hp[winner]) {
winner = left;
}
if(right <= heap_size && hp[right] > hp[winner]) {
winner = right;
}
if(position != winner) {
swap(position, winner);
update(heap_size, winner);
}
}
void createHeap() {
for(int i = n / 2;i >= 1;--i) {
update(n, i);
}
}
void solve() {
createHeap();
int heap_size = n;
for(int i = 1;i < n;++i) {
swap(1, heap_size);
--heap_size;
update(heap_size, 1);
}
for(int i = 1;i <= n;++i) {
g<<hp[i]<<" ";
}
}
int main() {
read();
solve();
return 0;
}