Pagini recente » Cod sursa (job #192553) | Cod sursa (job #676106) | Cod sursa (job #1640809) | Cod sursa (job #231676) | Cod sursa (job #3150700)
#include <iostream>
#include <fstream>
#include <vector>
#include <cstring>
#include <unordered_map>
#include <algorithm>
using namespace std;
ifstream f("algsort.in");
ofstream g("algsort.out");
int n;
int heap[500001];
void read() {
f>>n;
for(int i = 1;i <= n;++i) {
f>>heap[i];
}
}
void update(const int& heap_size, const int& pos) {
int winner = pos;
int left_pos = 2 * pos, right_pos = 2 * pos + 1;
if(left_pos <= heap_size && heap[left_pos] > heap[winner]) {
winner = left_pos;
}
if(right_pos <= heap_size && heap[right_pos] > heap[winner]) {
winner = right_pos;
}
if(winner != pos) {
swap(heap[winner], heap[pos]);
update(heap_size, winner);
}
}
void solve() {
for(int i = n / 2;i >= 1;--i) {
update(n, i);
}
int heap_size = n;
for(int i = 1;i <= n;++i) {
swap(heap[heap_size], heap[1]);
heap_size--;
update(heap_size, 1);
}
for(int i = 1;i <= n;++i) {
g<<heap[i]<<" ";
}
}
int main() {
read();
solve();
return 0;
}