Cod sursa(job #899764)

Utilizator DanFodorFODOR Dan Horatiu DanFodor Data 28 februarie 2013 16:13:34
Problema Heapuri Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.67 kb
#include <cstdio>
#include <fstream>
using namespace std;
int p[200005], v[200005];

int main()
{
    int n;
    ifstream in ("heapuri.in");
    ofstream out ("heapuri.out");
    in>>n;
    int i, nr=0, x, t, tasu, fiu, q=0, j, aux;
    for (i=1; i<=n; i++)
    {
        in>>t;
        if (t!=3)
            in>>x;
        if (t==1)
        {
            nr++;
            q++;
            p[nr]=x;
            v[q]=nr;
            tasu=nr;
            fiu=tasu/2;
            while (fiu>=1 && p[tasu]<p[fiu])
            {
                aux=p[tasu];
                p[tasu]=p[fiu];
                p[fiu]=aux;
                aux=v[tasu];
                v[tasu]=v[fiu];
                v[fiu]=aux;
                tasu=fiu;
                fiu/=2;
            }
        }
        if (t==2)
        {
            j=1;
            while (x!=v[j])
                j++;
            aux=p[j];
            p[j]=p[nr];
            p[nr]=aux;
            aux=v[j];
            v[j]=v[nr];
            v[nr]=aux;
            nr--;
            tasu=j;
            fiu=tasu*2;
            if (p[fiu+1]>p[fiu] && fiu+1<=nr)
                fiu++;
            while (fiu<=nr && p[tasu]>p[fiu])
            {
                aux=p[tasu];
                p[tasu]=p[fiu];
                p[fiu]=aux;
                aux=v[tasu];
                v[tasu]=v[fiu];
                v[fiu]=aux;
                tasu=fiu;
                fiu*=2;
                if (p[fiu+1]>p[fiu] && fiu+1<=nr)
                    fiu++;
                if (fiu<=nr) break;
            }
        }
        if (t==3)
            out<<p[1]<<"\n";
    }
    return 0;
}