Cod sursa(job #1857921)

Utilizator raduzxstefanescu radu raduzx Data 26 ianuarie 2017 20:38:33
Problema Heapuri Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.47 kb
#include <fstream>

using namespace std;
ifstream f("heapuri.in");
ofstream g("heapuri.out");
#define inf 1000000002
int heap[200003],catev,cateheap,poz[200003],v[200003],t,n,q,cod,i,x;
void change(int &a,int &q)
{
    t=a;
    a=q;
    q=t;
}
void upheap(int k)
{
    while(k>1 and v[heap[k]]<v[heap[k/2]])
        {
            swap(heap[k],heap[k/2]);
            swap(poz[heap[k]],poz[heap[k/2]]);
            k/=2;
        }
}
void downheap(int k)
{
    do
    {
        t=0;
        if(k*2<=cateheap)
        {
            t=k*2;
            if(k*2+1<=cateheap and v[heap[k*2]]>v[heap[k*2+1]])
                t=k*2+1;
            if(v[heap[k]]>v[heap[t]])
            {
                swap(heap[k],heap[t]);
                swap(poz[heap[k]],poz[heap[t]]);

                k=t;
            }
            else
                t=0;
        }

    }while(t);

}
int main()
{
    f>>n;
    for(q=1;q<=n;q++)
    {
        f>>cod;
        if(cod==3)
        {
            g<<v[heap[1]]<<'\n';
        }
        if(cod==1)
        {
            f>>x;
            catev+=1;
            v[catev]=x;
            cateheap+=1;
            poz[catev]=cateheap;
            heap[cateheap]=catev;
            upheap(cateheap);
        }
        if(cod==2)
        {
            f>>x;
            v[x]=-1;
            upheap(poz[x]);
            v[x]=inf;
            downheap(1);
            cateheap--;
        }
    }
    return 0;
}