Cod sursa(job #2065714)

Utilizator andrei32576Andrei Florea andrei32576 Data 14 noiembrie 2017 08:30:25
Problema Heapuri Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.3 kb
#include<fstream>
using namespace std;

int n,i,j,op,p,k,x,ct;
struct punct{int v,p;};
punct v[200010];

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

void down(int k,int n)
{
    int t,f;
    t=k;
    f=2*k;
    while(f<=n)
    {
        if(f<n && v[f].v<v[f+1].v) f++;
        if(v[t].v>v[f].v)
        {
            swap(v[t],v[f]);
            t=f;
            f=2*f;
        }
        else f=n+1;
    }
}

void up(int k,int n)
{
    int t,f;
    f=k;
    t=f/2;
    while(t && v[t].v>v[f].v)
    {
        swap(v[t],v[f]);
        f=t;
        t=f/2;
    }
}

void elimin(int pz)
{
    v[pz]=v[k];
    k--;
    if(k>1 && v[pz].v<v[pz/2].v) up(pz,k);
    else down(pz,k);
}

int main()
{
    fin>>n;
    ct=0;
    for(i=1;i<=n;i++)
    {
        fin>>op;
        if(op==1 || op==2)
        {
            fin>>p;
        }
        if(op==1)
        {
            k++;
            ct++;
            v[k].v=p;
            v[k].p=ct;
            up(k,k);
        }
        if(op==2)
        {
            x=0;
            for(j=1;j<=k && x==0;j++)
            {
                if(v[j].p==p) x=j;
            }
            elimin(x);
        }
        if(op==3) fout<<v[1].v<<"\n";
    }
    fin.close();
    fout.close();
    return 0;
}