Cod sursa(job #1615430)

Utilizator mantisVraciu Stefan mantis Data 26 februarie 2016 16:07:06
Problema Heapuri Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.08 kb
#include<fstream>
#include<algorithm>
using namespace std;
ifstream f("heapuri.in");
ofstream g("heapuri.out");
const int maxn=200005;
typedef int Heap[maxn];
int n,tip,x,nr;
Heap H;
void upheap(int nod)
{
    int k=H[nod];
    while(nod>1 && k>H[nod/2])
    {
        H[nod]=H[nod/2];
        nod/=2;
    }
    H[nod]=k;
}
void downheap(int nod, int nr)
{
    int s=0;
    do
    {
        s=0;
        if(nod*2<=nr)
        {
            s=nod*2;
            if(nod*2+1 <= nr && H[nod*2+1]>H[nod*2])
                s=nod*2+1;
            if(H[s]<=H[nod]) s=0;
        }
        if(s)
        {
            swap(H[s],H[nod]);
            nod=s;
        }
    }while(s);
}
void sterge(int &nr, int nod)
{
    H[nod]=H[nr];
    nr--;
    if(nod>1 && H[nod]>H[nod/2])
        upheap(nod);
    else downheap(nr, nod);
}
int main()
{
    f>>n;
    while(n--)
    {
        f>>tip;
        if(tip==1) {f>>x; H[++nr]=-x; upheap(nr);}
        if(tip==2) {f>>x; sterge(nr,-x);}
        if(tip==3) g<<-H[1]<<'\n';
    }
    g.close();
    return 0;
}