Cod sursa(job #2496835)

Utilizator cezarinfoTulceanu Cezar cezarinfo Data 21 noiembrie 2019 18:37:40
Problema Heapuri Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.41 kb
#include<cstdio>
#include<algorithm>
using namespace std;
FILE*in=fopen("heapuri.in","r");
FILE*out=fopen("heapuri.out","w");
int n,i,v[200003],ct=0,a,k,ver[200003],b,l;
int main()
{
    fscanf(in,"%d",&n);
    for(i=1;i<=n;i++)
    {
        ver[i]=i;
    }
    for(i=1;i<=n;i++)
    {
        fscanf(in,"%d",&a);
        if(a==1)
        {
            ct++;
            fscanf(in,"%d",&v[ct]);
            k=ct;
            while(v[k]<v[k/2])
            {
                swap(v[k],v[k/2]);
                swap(ver[k],ver[k/2]);
                k=k/2;
            }
        }
        if(a==2)
        {
            fscanf(in,"%d",&b);
            swap(v[ct],v[ver[b]]);
            k=ver[b];
            l=ver[b];
            while(v[k]<v[k/2])
            {
                swap(v[k],v[k/2]);
                swap(ver[k],ver[k/2]);
                k=k/2;
            }
            while((v[l]>v[2*l]||v[l]>v[2*l+1])&&l<=ct/2)
            {
                if(v[2*l]<=v[2*l+1])
                {
                    swap(v[l],v[2*l]);
                    swap(ver[l],ver[2*l]);
                }
                if(v[2*l]>=v[2*l+1])
                {
                    swap(v[l],v[2*l+1]);
                    swap(ver[l],ver[2*l+1]);
                }
            }
            ct--;
        }
        if(a==3)
        {
            fprintf(out,"%d\n",v[1]);
        }
    }
}