Cod sursa(job #2255624)

Utilizator unknownpersonBidasca Carina Georgiana unknownperson Data 7 octombrie 2018 12:42:43
Problema Heapuri Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.13 kb
#include <bits/stdc++.h>
using namespace std;
ifstream f("heapuri.in");
ofstream g("heapuri.out");

const int N = 200010;
int n,c,x,L,t,h[N],p[N],v[N];
void heapUp(int),heapDown(int),swapHeap(int,int);
int main()
{
    f>> n;
    for(; n; n--)
    {
        f>>c;
        if(c==3)
        {
            g<<v[h[1]]<<'\n';
            continue;
        }
        f>>x;
        if(c==1)
        {
            v[++t]=x;
            p[t]=++L;
            h[L]=t;
            heapUp(L);
            continue;
        }
        x=p[x];
        swapHeap(x,L);
        L--;
        heapUp(x);
        heapDown(x);
    }
    return 0;
}
void swapHeap(int i,int j)
{
    swap(h[i],h[j]);
    p[h[i]]=i;
    p[h[j]]=j;
}
void heapUp(int fiu)
{
    int tata=fiu/2;
    if(tata)
        if(v[h[fiu]]<v[h[tata]])
        {
            swapHeap(fiu,tata);
            heapUp(tata);
        }
}
void heapDown(int tata)
{
    int fiu=2*tata;
    if(fiu>L)
        return;
    if(fiu<L&&(v[h[fiu+1]]<v[h[fiu]]))fiu++;
    if(v[h[fiu]]<v[h[tata]])
    {
        swapHeap(tata,fiu);
        heapDown(fiu);
    }
}