Cod sursa(job #2153919)

Utilizator StepHoria Stefan Step Data 6 martie 2018 16:12:21
Problema Heapuri Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.01 kb
#include <iostream>
#include <fstream>

using namespace std;

ifstream f("heapuri.in");
ofstream g("heapuri.out");

int h[101],nh;

void urca (int p)
{
    while ( p>1 && h[p] < h[p/2] )
    {
        swap(h[p],h[p/2]);
        p/=2;
    }
}

void coboara (int p)
{
    int fs=2*p,fd=2*p+1,bun=p;

    if (fs<=nh && h[fs] < h[bun])
        bun=fs;

    if (fd<=nh && h[fd] < h[bun])
        bun=fd;
    if (bun != p)
    {
        swap (h[p],h[bun]);
        coboara (bun);
    }
}

void adauga (int val)
{
    h[++nh]=val;
    urca(nh);
}

void sterge (int p)
{
    swap(h[p],h[nh--]);
    urca(p);
    coboara (p);
}
int main()
{
    int n,i,x,o;
    f>>n;
    for (i=1; i<=n; i++)
    {
        f>>o;
        if (o==3)
        {
            g<<h[1]<<'\n';
            sterge(1);
        }
        f>>x;
        if (o==1)
        {
            adauga(x);
        }
        if (o==2)
        {
            sterge(x);
        }

        for (int j=1; j<=n; j++)
            cout<<h[i]<<" ";
        cout<<endl;
    }
    return 0;
}