Cod sursa(job #959902)

Utilizator BlackLordFMI Alex Oprea BlackLord Data 9 iunie 2013 13:03:21
Problema Heapuri Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.88 kb
#include <fstream>
using namespace std;
ifstream f("heapuri.in");
ofstream g("heapuri.out");
int n, t, m, nr, x, aux, pc, p, c, h[200010], a[200010], v[200010];
int main(){
    f>>n;
    for(;n;n--)
    {
        f>>t;
        if(t==3)
            g<<v[ h[1] ]<<"\n";
        else if(t==1)
        {
            f>>v[++nr];
            m++;
            a[nr]=m;
            h[m]=nr;
            c=m;
            p=c/2;
            while(p>=1 && v[ h[c] ]<v[ h[p] ])
            {
                aux=h[c];
                h[c]=h[p];
                h[p]=aux;
                a[ h[c] ]=c;
                a[ h[p] ]=p;
                c=p;
                p=p/2;
            }
        }
        else
        {
            f>>x;
            h[ a[x] ]=h[m--];
            pc=a[x];
            if(pc/2!=0 && v[ h[pc] ]<v[ h[pc/2] ])
            {
                c=pc;
                p=c/2;
                while(p!=0 && v[ h[c] ]<v[ h[p] ])
                {
                    aux=h[c];
                    h[c]=h[p];
                    h[p]=aux;
                    a[ h[c] ]=c;
                    a[ h[p] ]=p;
                    c=p;
                    p=p/2;
                }
            }
            else
            {
                p=pc;
                c=2*p;
                while(c<=m)
                {
                    if(c+1<=m && v[ h[c+1] ]<v[ h[c] ])
                        c++;
                    if(v[ h[p] ]>v[ h[c] ])
                    {
                        aux=h[p];
                        h[p]=h[c];
                        h[c]=aux;
                        a[ h[c] ]=c;
                        a[ h[p] ]=p;
                        p=c;
                        c=2*c;
                    }
                    else
                        break;
                }
            }
        }
    }
    return 0;
}