Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <vector>
- using namespace std;
- struct Heap {
- void addElement(int value) {
- elements.push_back(value);
- int i = elements.size() - 1;
- while (elements[i] < elements[(i - 1) / 2]) {
- swap(elements[i], elements[(i - 1) / 2]);
- i = (i - 1) / 2;
- }
- }
- int getMax() {
- int result = elements[0];
- swap(elements[0], elements[size() - 1]);
- elements.resize(size() - 1);
- return result;
- }
- int size() {
- return elements.size();
- }
- void heapify(int i) {
- int left, right, largest;
- while (true) {
- largest = i;
- left = 2 * i + 1;
- right = 2 * i + 2;
- if (left < size() && elements[left] < elements[largest]) {
- largest = left;
- }
- if (right < size() && elements[right] < elements[largest]) {
- largest = right;
- }
- if (largest == i) {
- break;
- }
- swap(elements[largest], elements[i]);
- i = largest;
- }
- }
- vector<int> elements;
- };
- int main() {
- Heap heap;
- int n;
- cin >> n;
- for (int i = 0; i < n; i++) {
- int value;
- cin >> value;
- heap.addElement(value);
- }
- for (int i = n - 1; i >= 0; i--) {
- cout << heap.getMax() << ' ';
- heap.heapify(0);
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement