Cod sursa(job #1450167)

Utilizator ZimmyZimmermann Erich Zimmy Data 11 iunie 2015 18:54:37
Problema Heapuri Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.21 kb
#include <fstream>

using namespace std;
ifstream f("heapuri.in");
ofstream g("heapuri.out");
int n,c,i,H[200010],V[200010],P[200010],h,t,x,poz,aux;
void Heap_down(int),Heap_up(int);
int main()
{
   f>>n;
   for(;n;n--)
   {
       f>>c;
       if(c==1)
       {
           h++;
           t++;
           H[h]=t;
           f>>V[t];
           P[t]=h;
           Heap_up(h);
       }
       else
        if(c==2)
       {
           f>>x;
           poz=P[x];
           H[poz]=H[h--];
           P[H[poz]]=poz;
           Heap_up(poz);
           Heap_down(poz);
       }
       else
        g<<V[H[1]]<<'\n';

   }
    return 0;
}
void Heap_down(int tata)
{
    int fiu=2*tata;
    if(fiu>h)return;
    if(fiu<h && V[H[fiu]]>V[H[fiu+1]])fiu++;
    if(V[H[fiu]]<V[H[tata]])
    {
        aux=H[fiu];
        H[fiu]=H[tata];
        H[tata]=aux;
        P[H[fiu]]=fiu;
        P[H[tata]]=tata;
        Heap_down(fiu);
    }
}
void Heap_up(int fiu)
{
    int tata=fiu/2;
    if(!tata)return;
    if(V[H[fiu]]<V[H[tata]])
    {
        aux=H[fiu];
        H[fiu]=H[tata];
        H[tata]=aux;
        P[H[fiu]]=fiu;
        P[H[tata]]=tata;
        Heap_up(tata);
    }
}