Cod sursa(job #2228648)

Utilizator ciutanpCiuta Andrei Calin ciutanp Data 4 august 2018 15:20:32
Problema Heapuri Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.21 kb
#include<bits/stdc++.h>
using namespace std;
ifstream f("heapuri.in");
ofstream g("heapuri.out");

//ttee

int n,lg,nr;
int v[200015],h[200015],poz[200015];

void ins(int k)
{

    while(k/2 && v[h[k]]<v[h[k/2]])
    {
        swap(h[k],h[k/2]);

        poz[h[k]]=k;
        poz[h[k/2]]=k/2;
        k/=2;
    }

}

void sterg(int k)
{
    int y=0;
    while(k!=y)
    {
        y=k;
        if(y*2<=lg && v[h[k]]>v[h[k*2]])
            k=y*2;
        if(y*2+1<=lg && v[h[k]]>v[h[y*2+1]])
            k=y*2+1;
        swap(h[k],h[y]);
        poz[h[k]]=k;
        poz[h[y]]=y;
    }
}

int main()
{
    f>>n;
    int op,x;
    for(int i=0;i<n;++i)
    {
        f>>op;
        if(op==1)
        {
            lg++;
            nr++;
            f>>x;
            v[nr]=x;
            h[lg]=nr;
            poz[nr]=lg;

            ins(lg);
        }
        else
            if(op==2)
        {
            f>>x;
            v[x]=-1;
            ins(poz[x]);

            poz[h[1]]=0;
            h[1]=h[lg--];
            poz[h[1]]=1;
            if(lg>1)
                sterg(1);
        }
        else
            if(op==3)
            g<<v[h[1]]<<'\n';
    }
}