Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <vector>
- using namespace std;
- int n;
- vector<int> a;
- void siftDown(int i) {
- while (2 * i + 1 < n) {
- // heapSize — количество элементов в куче
- int l = 2 * i + 1, r = 2 * i + 2;
- int j = l;
- if (r < n && a[r] < a[l]) {
- j = r;
- }
- if (a[i] <= a[j])
- break;
- swap(a[i], a[j]);
- i = j;
- }
- }
- void siftUp(int i) {
- while (a[i] < a[(i - 1) / 2]) {
- swap(a[i], a[(i - 1) / 2]);
- i = (i - 1) / 2;
- }
- }
- void insert(int key) {
- n++;
- a[n - 1] = key;
- siftUp(n - 1);
- }
- void buildHeap() {
- for (int i = n / 2; i >= 0; i--) {
- siftDown(i);
- }
- }
- int ext(){
- int ans = a[0];
- a[0] = a[n - 1];
- n--;
- siftDown(0);
- return ans;
- }
- int main() {
- n = 0;
- int k;
- cin >> k;
- a.resize(k);
- for (int i = 0; i < k; i++) {
- int v;
- cin >> v;
- insert(v);
- }
- for (int i = 0; i < k; i++){
- cout << ext() << ' ';
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement