Cod sursa(job #1480663)

Utilizator cremarencodianaCremarenco Diana cremarencodiana Data 2 septembrie 2015 23:15:42
Problema Heapuri Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 1.25 kb
# include <cstdio>
#include <vector>

using namespace std;

int op,i,n,nr,b[200010], a[200010], aux, index, j;

void fixUp(int a[], int k)
{
    int aux;
    while (k>1 && a[k/2]>=a[k])
    {
        aux =a[k/2]; a[k/2]=a[k]; a[k]=aux;
        k=k/2;
    }
}

void fixDown(int a[], int k, int nr)
{
    int j;
    while (2*k<=nr)
    {
        j = 2*k ;
        if (j+1<=nr && a[j]<a[j])
        {
            j++;
        }
        if (a[k]<a[j]) break; else
        {
            aux=a[k];
            a[k]=a[j];
            a[j]=aux;
        }
    }
}
int main()
{
    freopen("heapuri.in","r",stdin);
    freopen("heapuri.out","w",stdout);
    scanf("%d\n",&n);
    nr=0;
    for (i=1; i<=n; i++)
    {
        scanf("%d ",&op);
        if (op==1)
        {
            scanf("%d\n", &a[++nr]);
            b[nr]=a[nr];
            fixUp(b, nr);
        }
        if (op==2)
        {
            scanf("%d\n", &index);
            for (j=1; j<=nr; j++)
                if (b[j]==a[index])
                break;
            aux = b[j]; b[j]=b[nr]; b[nr]=aux;
            nr--;
            fixDown(b, j, nr);

        }
        if (op==3)
        {
            printf("%d\n",b[1]);
        }
    }


}