intanto ti consiglio di usare Key e non Val.. a livello concettuale è più corretto lavorare su chiavi che non sui valori direttamente. Se fai questo passaggio mentale vedrai che in seguito ti troverai bene a progettare algoritmi.
Un heap può essere banalmente usato per progettare code con priorità basate sul massimo.
Una coda fondamentalmente usa i seguenti metodi:
insert
extract-max
change_key
sono tutte operazioni banali con gli heap eseguite in tempo O(logn).
insert è un inserimento di un processo con una chiave assegnata in coda all'array. Ci fai girare la chamata heapify che lo va a posizionare dove gli compete nell'heap.
Extract tira fuori il massimo e poi risistema la struttura dell'heap (banalmente lo scambi con l'ultimo elemento, esegui heapify su n-1 elementi e ritorni l'elemento estratto)
change key idem.. cambi la chiave di un elemento e poi rifai heapify su quel nodo.
una coda basata sul minimo immagino si faccia con un heap al contrario, invece che max-heap con un min-heap che salva il minimo nella radice