Advertisement
Guest User

Untitled

a guest
Oct 16th, 2019
83
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.00 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. bool siftdown(vector<int> &a , int i) {
  5. int l = 2*i;
  6. int r = 2*i + 1;
  7. int ind = 0;
  8. if ((l <= a.size()) && (a[i] < a[l]))
  9. ind = l;
  10. else
  11. ind = i;
  12. if (( r <= a.size()) && (a[ind] < a[r]))
  13. ind = r;
  14. if ( ind != r)
  15. swap(a[i],a[ind]);
  16. siftdown(a,ind);
  17. }
  18. int build(vector<int> &a){
  19. for (int i = a.size()/2 ; i < 1; --i )
  20. siftdown(a,i);
  21. }
  22. int buildheap(vector<int> &a ){
  23. build(a);
  24. for (int i = 0; i < a.size(); ++i)
  25. swap (a[0],a[a.size() - 1]);
  26. a.size() == a.size() -1;
  27. siftdown(a,1);
  28.  
  29. }
  30.  
  31. int main(void) {
  32. int N;
  33. vector<int> arr;
  34. cin >> N;
  35. for (int i = 0; i < N; i++)
  36.  
  37. cin>>arr[i];
  38. buildheap(arr);
  39. int heapSize = N;
  40. for ( int i = 0; i < N - 2; ++ i)
  41. swap(arr[0], arr[N - 1 - i]);
  42. heapSize--;
  43. siftdown(arr, heapSize);
  44. for (int i = 1; i < N; ++i)
  45. cout << arr[i] <<" ";
  46. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement