Cod sursa(job #1623302)

Utilizator cristinelulCristian Virga cristinelul Data 1 martie 2016 18:41:58
Problema Heapuri Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.15 kb
#include <fstream>

using namespace std;

ifstream fin("heapuri.in");
ofstream fout("heapuri.out");

int n,lg,heap[200001],poz[200001];
void adaug(int x)
{
    int tata,fiu;
    heap[++lg]=x;
    fiu=lg;
    tata=fiu/2;
    while(heap[tata]>heap[fiu] && tata!=0)
    {
        swap(heap[tata],heap[fiu]);
        swap(poz[poz[tata]],poz[poz[fiu]]);
        fiu=tata;
        tata=tata/2;
    }
}
void elimin(int x)
{
    int tata,fiu;
    swap(heap[lg],heap[x]);
    poz[x]=poz[poz[lg]];
    lg--;
    tata=x;
    fiu=2*tata;
    while(heap[tata]>heap[fiu] && fiu<=lg)
    {
        swap(heap[tata],heap[fiu]);
        swap(poz[poz[tata]],poz[poz[fiu]]);
        tata=fiu;
        fiu=2*fiu;
    }
}
void centru()
{
    int i,x,op;
    fin>>n;
    for(i=1;i<=n;i++)
        poz[i]=i;
    for(i=1;i<=n;i++)
    {
        fin>>op;
        if(op==1)
        {
            fin>>x;
            adaug(x);
        }
        if(op==2)
        {
            fin>>x;
            elimin(poz[x]);
        }
        if(op==3)
            fout<<heap[1]<<'\n';
    }
}
int main()
{
    centru();
    fout.close();
    return 0;
}