Cod sursa(job #2748351)

Utilizator catarau.biancaCatarau Bianca Mihaela catarau.bianca Data 30 aprilie 2021 02:39:38
Problema Heapuri Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.24 kb

#include<stdio.h>
int n,crt,nr, a[200010], h[200010], p[200010];
void push(int x)
{
    int aux;
    while (x/2 && a[h[x]]<a[h[x/2]])
    {
        aux=h[x];
        h[x]=h[x/2];
        h[x/2]=aux;
        p[h[x]]=x;
        p[h[x/2]]=x/2;
        x/=2;
    }
}
void pop(int x)
{
    int aux,y=0;
    while (x!=y)
    {
        y=x;
        if (y*2<=crt && a[h[x]]>a[h[y*2]])
            x=y*2;
        if (y*2+1<=crt && a[h[x]]>a[h[y*2+1]])
            x=y*2+1;
        aux=h[x];
        h[x]=h[y];
        h[y]=aux;
        p[h[x]]=x;
        p[h[y]]=y;
    }
}

int main()
{
    int i,x,k;
    scanf("%d ",&n);
    for (i=0; i<n; i++)
    {
        scanf("%d ",&k);
        switch(k)
        {
        case 1:
            scanf("%d ", &x);
            crt++;
            nr++;
            a[nr]=x;
            h[crt]=nr;
            p[nr]=crt;
            push(crt);
            break;
        case 2:
            scanf("%d ", &x);
            a[x]=-1;
            push(p[x]);
            p[h[1]]=0;
            h[1]=h[crt--];
            p[h[1]]=1;
            if (crt>1)
                pop(1);
            break;
        case 3:
            printf("%d\n", a[h[1]]);
        }
    }
    return 0;
}