есть задание по построение кучи пытался по разному дохожу до 3 теста й потом ведают не правильный ответ. проверил на разные условие но у меня всё в порядке. если кто может подскажите пожалуйста
Задача на программирование. Данная задача состоит в реализации двоичной кучи. В первой строке ввода задаётся число n (1≤n≤105), далее n строк вида Insert X, где X — натуральное число, не превосходящее 109, или Extract. Первая операция должна добавлять в кучу число X, вторая должна извлекать максимум из кучи и выводить его в очередной строке вывода.
#include <iostream>
#include <algorithm>
#include <vector>
#include <string>
using namespace std;
class SimpleBinaryHeap {
vector<int> heap_data;
public:
void add(int value)
{
heap_data.push_back(value);
int i = heap_data.size() - 1;
int parent = (i - 1) / 2;
while (i > 0 && heap_data[parent] < heap_data[i])
{
int temp = heap_data[i];
heap_data[i] = heap_data[parent];
heap_data[parent] = temp;
i = parent;
parent = (i - 1) / 2;
}
}
void heapify(int i){
int leftChild;
int rightChild;
int largestChild;
for (;;)
{
leftChild = 2 * i + 1;
rightChild = 2 * i + 2;
largestChild = i;
if (leftChild < heap_data.size() && heap_data[leftChild] > heap_data[largestChild])
{
largestChild = leftChild;
}
if (rightChild < heap_data.size() && heap_data[rightChild] > heap_data[largestChild])
{
largestChild = rightChild;
}
if (largestChild == i)
{
break;
}
int temp = heap_data[i];
heap_data[i] = heap_data[largestChild];
heap_data[largestChild] = temp;
i = largestChild;
}
}
int extract() {
int res = heap_data[0];
heap_data[0] = heap_data[heap_data.size() - 1];
int index = 0;
for (int i = heap_data.size() / 2; i >= 0; i--)
{
heapify(i);
}
heap_data.pop_back();
return res;
}
int heapSort()
{
for (int i = heap_data.size() - 1; i >= 0; i--)
{
heapify(0);
return extract();
}
}
};
int main() {
SimpleBinaryHeap bh;
string command;
const char* com_insert = "Insert";
const char* com_extract = "Extract";
short num;
cin >> num;
for (short int i = 0; i < num; i++) {
cin >> command;
if (command == com_insert) {
int value;
cin >> value;
bh.add(value);
}
if (command == com_extract) {
cout << bh.heapSort() << endl;
}
}
return 0;
}