Pagini recente » Cod sursa (job #2555242) | Cod sursa (job #2042012) | Cod sursa (job #2352858) | Cod sursa (job #1112727) | Cod sursa (job #2741354)
#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;
}