#include <iostream>
#include <vector>
using namespace std;
// دالة لطباعة الـ array
void printArray(const vector<int>& arr) {
for (int x : arr) cout << x << " ";
cout << endl;
}
// heapify (Max Heap)
void heapify(vector<int>& arr, int n, int i) {
int largest = i;
int left = 2 * i + 1;
int right = 2 * i + 2;
if (left < n && arr[left] > arr[largest])
largest = left;
if (right < n && arr[right] > arr[largest])
largest = right;
if (largest != i) {
swap(arr[i], arr[largest]);
cout << "After swap at index " << i << ": ";
printArray(arr);
heapify(arr, n, largest);
}
}
// build heap مع تتبع التغييرات
void buildHeap(vector<int>& arr) {
int n = arr.size();
for (int i = n / 2 - 1; i >= 0; i--) {
cout << "\nHeapify at index " << i << ":\n";
heapify(arr, n, i);
cout << "Array after heapify(" << i << "): ";
printArray(arr);
}
}
int main() {
vector<int> arr = {4, 2,8,5,7,1,10,6,3,4};
cout << "Original array:\n";
printArray(arr);
buildHeap(arr);
cout << "\nFinal Max Heap:\n";
printArray(arr);
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKLy8g2K/Yp9mE2Kkg2YTYt9io2KfYudipINin2YTZgCBhcnJheQp2b2lkIHByaW50QXJyYXkoY29uc3QgdmVjdG9yPGludD4mIGFycikgewogICAgZm9yIChpbnQgeCA6IGFycikgY291dCA8PCB4IDw8ICIgIjsKICAgIGNvdXQgPDwgZW5kbDsKfQoKLy8gaGVhcGlmeSAoTWF4IEhlYXApCnZvaWQgaGVhcGlmeSh2ZWN0b3I8aW50PiYgYXJyLCBpbnQgbiwgaW50IGkpIHsKICAgIGludCBsYXJnZXN0ID0gaTsKICAgIGludCBsZWZ0ID0gMiAqIGkgKyAxOwogICAgaW50IHJpZ2h0ID0gMiAqIGkgKyAyOwoKICAgIGlmIChsZWZ0IDwgbiAmJiBhcnJbbGVmdF0gPiBhcnJbbGFyZ2VzdF0pCiAgICAgICAgbGFyZ2VzdCA9IGxlZnQ7CgogICAgaWYgKHJpZ2h0IDwgbiAmJiBhcnJbcmlnaHRdID4gYXJyW2xhcmdlc3RdKQogICAgICAgIGxhcmdlc3QgPSByaWdodDsKCiAgICBpZiAobGFyZ2VzdCAhPSBpKSB7CiAgICAgICAgc3dhcChhcnJbaV0sIGFycltsYXJnZXN0XSk7CgogICAgICAgIGNvdXQgPDwgIkFmdGVyIHN3YXAgYXQgaW5kZXggIiA8PCBpIDw8ICI6ICI7CiAgICAgICAgcHJpbnRBcnJheShhcnIpOwoKICAgICAgICBoZWFwaWZ5KGFyciwgbiwgbGFyZ2VzdCk7CiAgICB9Cn0KCi8vIGJ1aWxkIGhlYXAg2YXYuSDYqtiq2KjYuSDYp9mE2KrYutmK2YrYsdin2KoKdm9pZCBidWlsZEhlYXAodmVjdG9yPGludD4mIGFycikgewogICAgaW50IG4gPSBhcnIuc2l6ZSgpOwoKICAgIGZvciAoaW50IGkgPSBuIC8gMiAtIDE7IGkgPj0gMDsgaS0tKSB7CiAgICAgICAgY291dCA8PCAiXG5IZWFwaWZ5IGF0IGluZGV4ICIgPDwgaSA8PCAiOlxuIjsKICAgICAgICBoZWFwaWZ5KGFyciwgbiwgaSk7CgogICAgICAgIGNvdXQgPDwgIkFycmF5IGFmdGVyIGhlYXBpZnkoIiA8PCBpIDw8ICIpOiAiOwogICAgICAgIHByaW50QXJyYXkoYXJyKTsKICAgIH0KfQoKaW50IG1haW4oKSB7CiAgICB2ZWN0b3I8aW50PiBhcnIgPSB7NCwgMiw4LDUsNywxLDEwLDYsMyw0fTsKCiAgICBjb3V0IDw8ICJPcmlnaW5hbCBhcnJheTpcbiI7CiAgICBwcmludEFycmF5KGFycik7CgogICAgYnVpbGRIZWFwKGFycik7CgogICAgY291dCA8PCAiXG5GaW5hbCBNYXggSGVhcDpcbiI7CiAgICBwcmludEFycmF5KGFycik7CgogICAgcmV0dXJuIDA7Cn0=