Cod sursa(job #2497414)

Utilizator BionicOnea Radu Bionic Data 22 noiembrie 2019 16:59:51
Problema Heapuri Scor 40
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.69 kb
#include <iostream>
#include <fstream>

using namespace std;


struct node{
int val=10000000;
int cron;

}v[400002],auxh,big;


int n,i,index[400002],sizeh=1,x,crono=1,aux;


ifstream f("heapuri.in");
ofstream g("heapuri.out");


int main()
{

    f>>n;
    while(n)
    {
       f>>x;

       if(x==3)
       {

        g<<v[1].val<<endl;}
       else if(x==1)
       {

        f>>v[sizeh].val;
        v[sizeh].cron=crono;
        index[crono++]=sizeh;
        i=sizeh++;

        while(i>1&&v[i].val<v[i/2].val)
        {
            aux=index[v[i].cron];
            index[v[i].cron]=index[v[i/2].cron];
            index[v[i/2].cron]=aux;
            auxh=v[i/2];
            v[i/2]=v[i];
            v[i]=auxh;
            i/=2;
            }

        }


       else
        {
            f>>x;
            x=index[x];
            sizeh--;
            index[v[sizeh].cron]=x;
            v[x]=v[sizeh];
            v[sizeh]=big;
            int m=min(v[x*2].val,v[x*2+1].val);
           while(v[x].val>m&&x<sizeh)
        {
            if(v[x*2].val==m)
            {aux=index[v[x].cron];
            index[v[x].cron]=index[v[x*2].cron];
            index[v[x*2].cron]=aux;
            auxh=v[x*2];
            v[x*2]=v[x];
            v[x]=auxh;
            x=x*2;
            }

          else
            {aux=index[v[x].cron];
            index[v[x].cron]=index[v[x*2+1].cron];
            index[v[x*2+1].cron]=aux;
            auxh=v[x*2+1];
            v[x*2+1]=v[x];
            v[x]=auxh;
            x=x*2+1;
            }
        m=min(v[x*2].val,v[x*2+1].val);
        }



        }


       n--;
    }






}