Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- bool siftdown(vector<int> &a , int i) {
- int l = 2*i;
- int r = 2*i + 1;
- int ind = 0;
- if ((l <= a.size()) && (a[i] < a[l]))
- ind = l;
- else
- ind = i;
- if (( r <= a.size()) && (a[ind] < a[r]))
- ind = r;
- if ( ind != r)
- swap(a[i],a[ind]);
- siftdown(a,ind);
- }
- int build(vector<int> &a){
- for (int i = a.size()/2 ; i < 1; --i )
- siftdown(a,i);
- }
- int buildheap(vector<int> &a ){
- build(a);
- for (int i = 0; i < a.size(); ++i)
- swap (a[0],a[a.size() - 1]);
- a.size() == a.size() -1;
- siftdown(a,1);
- }
- int main(void) {
- int N;
- vector<int> arr;
- cin >> N;
- for (int i = 0; i < N; i++)
- cin>>arr[i];
- buildheap(arr);
- int heapSize = N;
- for ( int i = 0; i < N - 2; ++ i)
- swap(arr[0], arr[N - 1 - i]);
- heapSize--;
- siftdown(arr, heapSize);
- for (int i = 1; i < N; ++i)
- cout << arr[i] <<" ";
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement