Cod sursa(job #2153986)

Utilizator sabinantonSabin Anton sabinanton Data 6 martie 2018 16:53:11
Problema Heapuri Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.1 kb
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("heapuri.in");
ofstream fout("heapuri.out");
int h[100001],v[100001],poz[1000001],c,n,m,nh;
void swapp(int p, int q)
{
    swap(h[p],h[q]);
    poz[h[p]]=p;
    poz[h[q]]=q;
}
void urca(int p)
{
    while(p>1&&v[h[p]]<v[h[p/2]])
    {
        swapp(p,p/2);
        p/=2;
    }
}
void coboara(int p)
{
    int fs=2*p,fd=2*p+1,bun=p;
    if(fs<=nh&&v[h[fs]]<v[h[bun]])
    {
        bun=fs;
    }
    if(fd<=nh&&v[h[fd]]<v[h[bun]])bun=fd;
    if(bun!=p)
    {
        swapp(p,bun);
        coboara(bun);
    }
}
void adauga( int p)
{
    h[++nh]=p;
    poz[p]=nh;
    urca(nh);
}
void sterge(int p)
{
    swapp(p,nh--);
    urca(p);
    coboara(p);

}
int main()
{
    int i,j,x,ind=0;
    fin>>n;
    for(i=1; i<=n; i++)
    {
        fin>>c;
        if(c==1)
        {
            fin>>x;
            ind++;
            v[ind]=x;
            adauga(ind);
        }
        else if(c==2)
        {
            fin>>x;
            sterge(poz[x]);

        }
        else if(c==3)
        {
            fout<<v[h[1]]<<"\n";
        }

    }
    return 0;
}