Cod sursa(job #913317)

Utilizator robert.onesimRobert Onesim robert.onesim Data 13 martie 2013 11:49:53
Problema Heapuri Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.05 kb
#include <fstream>
using namespace std;
ifstream fin("heapuri.in");
ofstream fout("heapuri.out");
int H[200005],poz[200005],m,n;
void insertheap(int& lg,int x)
{
    int aux, tata, fiu;
    lg++; H[lg]=x; fiu=lg;  tata=lg/2; m++;poz[m]=lg;
    while(H[fiu]<H[tata]&&tata>0)
    {
        aux=H[fiu];
        H[fiu]=H[tata];
        H[tata]=aux;


        poz[tata]=lg;
        poz[fiu]=tata;
        fiu=tata;tata=fiu/2;
    }
}
void erase(int x,int& lg)
{
    int aux, tata, fiu;
   tata=poz[x];fiu=poz[x]*2;H[poz[x]]=H[lg];lg--;
   while(fiu<=lg)
   {
       if(fiu+1<=lg) fiu = H[fiu]<H[fiu+1]?fiu+1:fiu;
       if(H[tata]>H[fiu])
       {
            aux=H[fiu];
            H[fiu]=H[tata];
            H[tata]=aux;
            tata=fiu;fiu*=2;
       }
       else break;
   }
}

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