Advertisement
wwilkowski

Untitled

Jun 11th, 2021
537
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.25 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>
  3.  
  4. using namespace std;
  5.  
  6.  
  7. void heapify (vector <int> &A, int i) {
  8.     int best = i;
  9.     int temp;
  10.     int l = 2*i + 1;
  11.     int r = 2*i + 2;
  12.     if (r < A.size() && A[r] < A[best])
  13.         best = r;
  14.     if (l < A.size() && A[l] <= A[best])
  15.         best = l;
  16.     if (best != i) {
  17.         swap(A[i], A[best]);
  18.         heapify(A, best);
  19.     }
  20. }
  21.  
  22. void buildHeap(vector<int> &A) {
  23.     for (int i=A.size()/2; i>=0; i--) {
  24.         heapify(A, i);
  25.     }
  26. }
  27.  
  28. void extract(vector<int> &A) {
  29.     int m = A[0];
  30.     cout<<A[0]<<endl;
  31.     swap(A[0], A[A.size()-1]);
  32.     A.pop_back();
  33.     buildHeap(A);
  34. }
  35.  
  36. void print_heap(vector<int> &A) {
  37.     for (int i=0; i<A.size(); i++) {
  38.         cout << A[i] << " ";
  39.     }
  40.     cout << endl;
  41. }
  42.  
  43. int main() {
  44.     int n_test;
  45.     int N;
  46.  
  47.     vector <int> A; // tablica dla kopca
  48.     cin >> n_test;
  49.     for (int i=0; i<n_test; i++) {
  50.         cin >> N;
  51.         A.clear();
  52.         if (N>0) {
  53.             int i;
  54.             int value;
  55.             for (i=0; i<N; i++) {
  56.                 cin >> value;
  57.                 A.push_back(value);
  58.             }
  59.             buildHeap(A);
  60.         }
  61.         int option_number;
  62.         char option;
  63.         cin >> option_number;
  64.         for (int i=0; i<option_number; i++) {
  65.             cin >> option;
  66.             switch (option) {
  67.                 case 'E':
  68.                     extract(A);
  69.                     break;
  70.                 case 'P':
  71.                     print_heap(A);
  72.                     break;
  73.                 default:
  74.                     break;
  75.             }
  76.         }
  77.     }
  78. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement