Cod sursa(job #1594006)

Utilizator dezenStefan Brasoveanu dezen Data 9 februarie 2016 09:11:20
Problema Heapuri Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 1.22 kb
#include<cstdio>
#include<algorithm>
using namespace std;
int n,o,ind,i,x,q,ind2,w;
struct hip
{
    int val;
    int ord;
} h[200001];
void up(int i)
{
    if(i!= 1 && h[i].val<h[i/2].val)
    {
        swap(h[i],h[i/2]);
        up(i/2);
    }
}
void down(int i)
{
    if(2*i<=ind && h[i].val>h[2*i].val)
    {
        swap(h[i],h[2*i]);
        up(2*i);
    }
}
int main()
{
    freopen("heapuri.in","r",stdin);
    freopen("heapuri.out","w",stdout);
    scanf("%d",&n);
    for(i=0; i<n; i++)
    {
        scanf("%d",&o);
        if(o == 1)
        {
            scanf("%d",&x);
            ind++;
            ind2=ind;
            h[ind].val = x;
            h[ind].ord = ind;
            while(ind2>1 && h[ind2/2].val>h[ind2].val)
            {
                swap(h[ind2],h[ind2/2]);
                ind2/=2;
            }
        }
        if(o == 2)
        {
            scanf("%d",&x);
            for(w=1;w<=ind;w++)if(h[w].ord == x)
            {
                swap(h[w],h[ind]);
                break;
            }
            ind --;
            up(w);
            down(w);
        }
        if(o == 3)
        {
            printf("%d\n",h[1].val);
        }
    }

}