#include <iostream>
using namespace std;
const int MAX_SIZE = 1000;
int heap[MAX_SIZE];
int heapSize = 0;
int parent(int i) { return (i - 1) / 2; }
int leftChild(int i) { return 2 * i + 1; }
int rightChild(int i) { return 2 * i + 2; }
void heapifyUp(int i) {
while (i > 0 && heap[parent(i)] > heap[i]) {
swap(heap[i], heap[parent(i)]);
i = parent(i);
}
}
void heapifyDown(int i) {
int smallest = i;
int left = leftChild(i);
int right = rightChild(i);
if (left < heapSize && heap[left] < heap[smallest])
smallest = left;
if (right < heapSize && heap[right] < heap[smallest])
smallest = right;
if (smallest != i) {
swap(heap[i], heap[smallest]);
heapifyDown(smallest);
}
}
void insert(int value) {
if (heapSize >= MAX_SIZE) {
cout << "Heap đầy!" << endl;
return;
}
heap[heapSize] = value;
heapifyUp(heapSize);
heapSize++;
}
int extractMin() {
if (heapSize <= 0) {
cout << "Heap rỗng!" << endl;
return -1;
}
int root = heap[0];
heap[0] = heap[--heapSize];
heapifyDown(0);
return root;
}
void printHeap() {
cout << "Min Heap hiện tại: ";
for (int i = 0; i < heapSize; i++) {
cout << heap[i] << " ";
}
cout << endl;
}
int main() {
insert(10);
insert(5);
insert(3);
insert(2);
insert(8);
insert(15);
printHeap();
cout << "Phần tử nhỏ nhất (extractMin): " << extractMin() << endl;
printHeap();
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKY29uc3QgaW50IE1BWF9TSVpFID0gMTAwMDsKaW50IGhlYXBbTUFYX1NJWkVdOwppbnQgaGVhcFNpemUgPSAwOwoKaW50IHBhcmVudChpbnQgaSkgeyByZXR1cm4gKGkgLSAxKSAvIDI7IH0KaW50IGxlZnRDaGlsZChpbnQgaSkgeyByZXR1cm4gMiAqIGkgKyAxOyB9CmludCByaWdodENoaWxkKGludCBpKSB7IHJldHVybiAyICogaSArIDI7IH0KCnZvaWQgaGVhcGlmeVVwKGludCBpKSB7CiAgICB3aGlsZSAoaSA+IDAgJiYgaGVhcFtwYXJlbnQoaSldID4gaGVhcFtpXSkgewogICAgICAgIHN3YXAoaGVhcFtpXSwgaGVhcFtwYXJlbnQoaSldKTsKICAgICAgICBpID0gcGFyZW50KGkpOwogICAgfQp9Cgp2b2lkIGhlYXBpZnlEb3duKGludCBpKSB7CiAgICBpbnQgc21hbGxlc3QgPSBpOwogICAgaW50IGxlZnQgPSBsZWZ0Q2hpbGQoaSk7CiAgICBpbnQgcmlnaHQgPSByaWdodENoaWxkKGkpOwoKICAgIGlmIChsZWZ0IDwgaGVhcFNpemUgJiYgaGVhcFtsZWZ0XSA8IGhlYXBbc21hbGxlc3RdKQogICAgICAgIHNtYWxsZXN0ID0gbGVmdDsKICAgIGlmIChyaWdodCA8IGhlYXBTaXplICYmIGhlYXBbcmlnaHRdIDwgaGVhcFtzbWFsbGVzdF0pCiAgICAgICAgc21hbGxlc3QgPSByaWdodDsKCiAgICBpZiAoc21hbGxlc3QgIT0gaSkgewogICAgICAgIHN3YXAoaGVhcFtpXSwgaGVhcFtzbWFsbGVzdF0pOwogICAgICAgIGhlYXBpZnlEb3duKHNtYWxsZXN0KTsKICAgIH0KfQoKdm9pZCBpbnNlcnQoaW50IHZhbHVlKSB7CiAgICBpZiAoaGVhcFNpemUgPj0gTUFYX1NJWkUpIHsKICAgICAgICBjb3V0IDw8ICJIZWFwIMSR4bqneSEiIDw8IGVuZGw7CiAgICAgICAgcmV0dXJuOwogICAgfQogICAgaGVhcFtoZWFwU2l6ZV0gPSB2YWx1ZTsKICAgIGhlYXBpZnlVcChoZWFwU2l6ZSk7CiAgICBoZWFwU2l6ZSsrOwp9CgppbnQgZXh0cmFjdE1pbigpIHsKICAgIGlmIChoZWFwU2l6ZSA8PSAwKSB7CiAgICAgICAgY291dCA8PCAiSGVhcCBy4buXbmchIiA8PCBlbmRsOwogICAgICAgIHJldHVybiAtMTsKICAgIH0KICAgIGludCByb290ID0gaGVhcFswXTsKICAgIGhlYXBbMF0gPSBoZWFwWy0taGVhcFNpemVdOwogICAgaGVhcGlmeURvd24oMCk7CiAgICByZXR1cm4gcm9vdDsKfQoKdm9pZCBwcmludEhlYXAoKSB7CiAgICBjb3V0IDw8ICJNaW4gSGVhcCBoaeG7h24gdOG6oWk6ICI7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IGhlYXBTaXplOyBpKyspIHsKICAgICAgICBjb3V0IDw8IGhlYXBbaV0gPDwgIiAiOwogICAgfQogICAgY291dCA8PCBlbmRsOwp9CgppbnQgbWFpbigpIHsKICAgIGluc2VydCgxMCk7CiAgICBpbnNlcnQoNSk7CiAgICBpbnNlcnQoMyk7CiAgICBpbnNlcnQoMik7CiAgICBpbnNlcnQoOCk7CiAgICBpbnNlcnQoMTUpOwoKICAgIHByaW50SGVhcCgpOwoKICAgIGNvdXQgPDwgIlBo4bqnbiB04butIG5o4buPIG5o4bqldCAoZXh0cmFjdE1pbik6ICIgPDwgZXh0cmFjdE1pbigpIDw8IGVuZGw7CgogICAgcHJpbnRIZWFwKCk7CgogICAgcmV0dXJuIDA7Cn0K