#include #include using namespace std; class Heap { vector data; void shift_up(int i) { int p = (i - 1) / 2; if (data[p] > data[i]) { swap(data[p], data[i]); shift_up(p); } } void shift_down(int i) { int left = i * 2 + 1; int right = i * 2 + 2; if (left >= data.size()) { return; } int to_swap = left; if (right < data.size()) { if (data[right] < data[left]) { to_swap = right; } } if (data[to_swap] < data[i]) { swap(data[i], data[to_swap]); shift_down(to_swap); } } public: void push(int priority) { data.push_back(priority); shift_up(data.size() - 1); } void pop() { swap(data[0], data[data.size() - 1]); data.pop_back(); shift_down(0); } int top() { return data[0]; } bool empty() { return data.empty(); } }; int main() { Heap heap; int n; cin >> n; for (int i = 0; i < n; i++) { int t; cin >> t; heap.push(t); } while (!heap.empty()) { cout << heap.top() << "\n"; heap.pop(); } return 0; }