Cod sursa(job #1898439)

Utilizator F4nELFanel Catalin F4nEL Data 2 martie 2017 00:50:17
Problema Heapuri Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.19 kb
#include <iostream>
#include <fstream>
using namespace std;
int n,lg=0,v[200001]={0},poz[200001]={0},p=0,au[200001]={0};
void add(int fa)
{

    while (au[v[fa]]<au[v[fa/2]] && fa>1)
    {
        swap(v[fa],v[fa/2]);
        poz[v[fa]]=fa;
        poz[v[fa/2]]=fa/2;
        fa/=2;
    }
}

void ster(int a)
{
    int fa=-1;
    while( fa!=a)
    {
        fa=a;
        if(au[v[a]]>au[v[2*fa]] && 2*fa<=lg)a=fa*2;
         if(au[v[a]]>au[v[2*fa+1]] && 2*fa+1<=lg)a=2*fa+1;

        swap(v[fa],v[a]);
        poz[v[fa]]=fa;
        poz[v[a]]=a;


    }

}
int main()
{
    ifstream f("heapuri.in");
    ofstream g("heapuri.out");
    f>>n;
    int c,x;
    for(int i=1;i<=n;i++)
    {
        f>>c;
        if(c==1)
        {
            f>>x;
            p++;
            v[++lg]=p;
            poz[p]=lg;
            au[p]=x;
            add(lg);

        }
        else if(c==2)
        {
            f>>x;
            au[x]=-1;
            add(poz[x]);
            poz[v[1]]=0;
            v[1]=v[lg];
            poz[v[1]]=1;
            lg--;
            if(lg-1)ster(1);

        }
        else {
           g<<au[v[1]]<<'\n';
        }
    }
}