Cod sursa(job #914466)

Utilizator robert.onesimRobert Onesim robert.onesim Data 14 martie 2013 10:04:36
Problema Heapuri Scor 20
Compilator cpp Status done
Runda Arhiva educationala Marime 1.16 kb
#include <fstream>
using namespace std;
ifstream fin("heapuri.in");
ofstream fout("heapuri.out");
int H[200005],poz[200005],m,n,A[200005],lg;
void insertheap(int x, int lg)
{
    int aux, tata, fiu;
    fiu=lg; tata=lg/2;
    while(A[H[tata]]>A[x]&&tata>0)
    {
        H[fiu]=H[tata];poz[H[fiu]]=fiu;
        fiu=tata; tata=fiu/2;
    }
    H[fiu]=x; poz[H[fiu]]=fiu;
}
void comb(int x, int lg)
{
    int y=H[x];
    int tata=x, fiu=2*tata;
    while(fiu<=lg)
    {
        if(fiu<lg && A[H[fiu+1]]<H[fiu]) fiu++;
        if(A[H[fiu]]<A[y])
        {
            H[tata]=H[fiu]; poz[H[tata]]=tata;
            tata=fiu; fiu=fiu*2;
        }
        else fiu=lg+1;
    }
    H[tata]=y; poz[H[tata]]=tata;
}
void erase(int x,int lg)
{
   H[x]=H[lg+1];
   poz[H[x]]=x;
   comb(x,lg);
}

int main()
{
    int i,val,nr;
    fin>>n;
    for(i=1;i<=n;i++)
    {
        fin>>val;
        if(val==1)
         {
           fin>>nr;
           A[++A[0]]=nr;
           insertheap(A[0],++lg);}
        if(val==2)
        {
           fin>>nr;
           erase(poz[nr],--lg);
        }
        if(val==3) {fout<<A[H[1]]<<"\n";}
    }
}