Cod sursa(job #751463)

Utilizator ioanabIoana Bica ioanab Data 26 mai 2012 10:21:18
Problema Heapuri Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.13 kb
#include <fstream>
using namespace std;

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

const int N=200005;

int h[N],v[N],poz[N];
int nh,nr;


void swap(int p,int q)
{
    int aux;
    aux=h[p];
    h[p]=h[q];
    h[q]=aux;
    poz[h[p]]=p;
    poz[h[q]]=q;

}

void up(int p)
{
    while(p>1 && v[h[p]]<v[h[p/2]])
    {
        swap(p,p/2);
        p=p/2;
    }
}

void add(int x)
{
    v[++nr]=x;
    h[++nh]=nr;
    poz[nr]=nh;
    up(nh);
}

void down(int p)
{
    int S=p*2,D=p*2+1,op=p;
    if(S<=nh && v[h[S]]<v[h[op]])
        op=S;
    if(D<=nh && v[h[D]]<v[h[op]])
        op=D;
    if(op!=p)
    {
        swap(p,op);
        down(op);
    }
}

void del(int p)
{
    swap(p,nh--);
    up(p);
    down(p);
}


int main()
{
    int n,i,q,x;
    in>>n;

    for(i=1;i<=n;i++)
    {
        in>>q;
        if(q==1)
        {
            in>>x;
            add(x);
            continue;
        }
        if(q==2)
        {
            in>>x;
            del(poz[x]);
            continue;
        }
        out<<v[h[1]]<<"\n";
    }

    return 0;
}