Cod sursa(job #2741354)

Utilizator MirunaStefaniaLupascu Miruna-Stefania MirunaStefania Data 15 aprilie 2021 21:38:46
Problema Heapuri Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.52 kb
#include <iostream>
#include<fstream>
#include <vector>
#define N 200005
using namespace std;
ifstream fin("heapuri.in");
ofstream fout("heapuri.out");

int  heap[N], hsize;
///heap de minim
void HeapUp(int nod)///pt nodul care nu mai corespunde --> la inserare va fi chiar ultima poz
{
    while(nod > 1 && heap[nod] < heap[nod/2])//daca este mai mic decat tatal lui il urcam
    {
        swap(heap[nod], heap[nod/2]);
        nod = nod/2; //aplicam iar
    }
}

void HeapDown(int nod)
{
    int son;
    do
    {
        son = 0;
        if(2*nod < hsize)//daca ar fiu stanga
        {
            son = 2 * nod;
            if(2*nod + 1 < hsize && heap[2*nod + 1] < heap[2*nod])//daca are si fiu dreapta si este mai mic decat cel stanga
                son = 2 * nod;//este pretendent mai bun
            if(heap[son]>=heap[nod])son = 0;//nu se interschimba
        }
        if(son)//daca are un fiu mai mic
        {
            swap(heap[nod], heap[son]);
            nod = son;//pt a continua procedeul
        }

    }while(son);///cat inca gasim fii care pot fi urcati
}

void HeapDelete(int nod)
{
    heap[nod] = heap[hsize--];///il aducem pe cel de pe ultima poz;
    ///vedem daca trebuie urcat sau coborat
    if(nod > 1 && heap[nod]<heap[nod/2])//daca este mai mic decat tatal il urcam
        HeapUp(nod);
    else HeapDown(nod);

}

void HeapAdd(int val)
{
    heap[++hsize] = val;
    HeapUp(hsize);///l am adaugat pe ultima poz si il urcam
}

int main()
{

    return 0;
}