Cod sursa(job #2460874)

Utilizator andrei42Oandrei42O andrei42O Data 24 septembrie 2019 17:09:41
Problema Heapuri Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.24 kb
#include <bits/stdc++.h>
using namespace std;
ifstream f("heapuri.in");
ofstream g("heapuri.out");
const int N = 200010;

int n,o,k,lheap,x,val[N],heap[N],pozHeap[N];
void swapHeap(int poz1,int poz2)
{
    swap(heap[poz1],heap[poz2]);
    pozHeap[heap[poz1]]=poz1;
    pozHeap[heap[poz2]]=poz2;
}
void heapUp(int fiu)
{
    int tata=fiu/2;
    if(!tata)
        return;
    if(val[heap[fiu]]<val[heap[tata]])
    {
        swapHeap(fiu,tata);
        heapUp(tata);
    }
}
void heapDown(int tata)
{
    int fiu=2*tata;
    if(fiu>lheap)return;
    if(fiu<lheap)if(val[heap[fiu+1]]<val[heap[fiu]])fiu++;
    if(val[heap[fiu]]<val[heap[tata]])
    {
        swapHeap(fiu,tata);
        heapDown(fiu);
    }
}
int main()
{
    f >> n ;
    for(int i=1;i<=n;i++)
    {
        f>>o;
        if(o==1)
        {
            k++;
            f>>val[k];
            heap[++lheap]=k;
            pozHeap[k]=lheap;
            heapUp(lheap);
        }
        else
            if(o==2)
        {
            f>>x;
            x=pozHeap[x];
            swapHeap(x,lheap);
            lheap--;
            heapUp(x);
            heapDown(x);
        }
        else
            g<<val[heap[1]]<<'\n';
    }
    return 0;
}