#include <stdio.h>
#include <stdlib.h>
#include <limits.h>

typedef struct Task {
    int taskID;
    int priority;
} Task;

typedef struct MinHeap {
    Task* heap;
    int size;
    int capacity;
} MinHeap;

// Function to create a new Min-Heap
MinHeap* createMinHeap(int capacity) {
    MinHeap* minHeap = (MinHeap*)malloc(sizeof(MinHeap));
    minHeap->capacity = capacity;
    minHeap->size = 0;
    minHeap->heap = (Task*)malloc(capacity * sizeof(Task));
    return minHeap;
}

// Function to swap two tasks
void swap(Task* a, Task* b) {
    Task temp = *a;
    *a = *b;
    *b = temp;
}

// Function to heapify the Min-Heap
void heapify(MinHeap* minHeap, int index) {
    int smallest = index;
    int left = 2 * index + 1;
    int right = 2 * index + 2;

    if (left < minHeap->size && minHeap->heap[left].priority < minHeap->heap[smallest].priority) {
        smallest = left;
    }
    if (right < minHeap->size && minHeap->heap[right].priority < minHeap->heap[smallest].priority) {
        smallest = right;
    }
    if (smallest != index) {
        swap(&minHeap->heap[index], &minHeap->heap[smallest]);
        heapify(minHeap, smallest);
    }
}

// Function to add a task to the Min-Heap
void addTask(MinHeap* minHeap, int taskID, int priority) {
    if (minHeap->size >= minHeap->capacity) {
        printf("Heap is full, cannot add more tasks\n");
        return;
    }

    Task newTask;
    newTask.taskID = taskID;
    newTask.priority = priority;

    minHeap->heap[minHeap->size] = newTask;
    minHeap->size++;

    // Reorder the heap
    int index = minHeap->size - 1;
    while (index > 0 && m