Cod sursa(job #1873636)

Utilizator VladAfrasineiAfrasinei VladAfrasinei Data 9 februarie 2017 12:04:01
Problema Heapuri Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.16 kb
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("heapuri.in");
ofstream fout("heapuri.out");
int H[200001],n,t,k,nr,a[200001],p,ct;
void Comb(int i)
{
    int v=H[i],tata=i,fiu=2*i;
    while(fiu<=ct)
    {
        if(fiu<ct)
            if(H[fiu]<H[fiu+1])
                fiu++;
        if(v<H[fiu])
        {
            H[tata]=H[fiu];
            tata=fiu;
            fiu=2*fiu;
        }
        else
            fiu=ct+1;
    }
    H[tata]=v;
}
void InvComb(int x)
{
    int v=H[x];
    while(x>1&&v>H[x/2])
    {
        H[x]=H[x/2];
        x=x/2;
    }
    p=x;
    H[x]=v;
}
void inserare(int x)
{
    H[++ct]=x;
    InvComb(ct);
}
void stergere(int x)
{
    H[x]=H[n];
    --n;
    if(x>1&&H[x]<H[x/2])
        InvComb(x);
    else
        Comb(x);
}

int main()
{
    int i,v;
fin>>n;
for(i=1;i<=n;i++)
{
    fin>>t;
    if(t==1)
    {
        fin>>k;
        inserare(k);

    }
    else if(t==2)
    {
        fin>>k;
        stergere(k);
    }
        else
        {
            fout<<H[1]<<"\n";
        }
}
for(i=1;i<=ct;i++)
    cout<<H[i]<<" ";
    return 0;
}