Cod sursa(job #2770182)

Utilizator RTG123Razvan Diaconescu RTG123 Data 19 august 2021 18:39:31
Problema Heapuri Scor 20
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 2.51 kb
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("heapuri.in");
ofstream g("heapuri.out");
struct imp
{
    int h,v;
};
int n,q,a,nr,orm,elm;
imp val[200001];
void push (int poz)
{
    imp aux;
    while (poz>1)
    {
        if (val[poz].v>val[poz/2].v)
        {
            return ;
        }
        else
        {
            aux=val[poz];
            val[poz]=val[poz/2];
            val[poz/2]=aux;
            poz=poz/2;
        }
    }
}
void pop (int poz)
{
    imp aux;
    int y;
    while (2*poz<=nr)
    {
        y=2*poz;
        if (2*poz+1<=nr && val[y].v>val[y+1].v)
        {
            y++;
        }
        if (val[poz].v<val[y].v)
        {
            return ;
        }
        else
        {
            aux=val[poz];
            val[poz]=val[y];
            val[y]=aux;
            /*v[h[poz]]=v[h[y]];
            v[h[y]]=aux;
            aux=h[poz];
            h[poz]=h[y];
            h[y]=aux;*/
            poz=y;
        }
    }
}
int main()
{
    f>>n;
    for (int i=1; i<=n; i++)
    {
        f>>q;
        if (q==1)
        {
            f>>a;
            //cout<<nr<<' '<<a<<'\n';
            nr++;
            val[nr].v=a;
            val[nr].h=nr;
            push(nr);
        }
        else if (q==2)
        {
            f>>a;
            //cout<<v[h[4]]<<'\n';
            //cout<<h[a]<<' ';
            /*for (int j=1; j<=nr; j++)
            {
                cout<<val[j].h<<' '<<val[j].v<<'\n';
            }
            cout<<'\n';*/
            int ok=0;
            for (int j=1; j<=nr && ok==0; j++)
            {
                //cout<<h[j]<<' '<<j<<'\n';
                if (val[j].h==a)
                {
                    imp aux=val[j];
                    ok=1;
                    val[j]=val[nr];
                    val[nr]=aux;
                }
            }
            /*for (int j=1; j<=nr; j++)
            {
                cout<<val[j].h<<' '<<val[j].v<<'\n';
            }
            cout<<'\n';*/
            nr--;
            //push(nr);
            pop(1);
            //cout<<v[h[1]]<<'\n';
           // cout<<a<<' '<<afis[a]<<'\n';
            //elim(a,nr);

            //cout<<afis[a]<<'\n';
        }
        else
        {
            g<<val[1].v<<'\n';
        }
      /*  cout<<'\n';
    for (int i=1; i<=nr; i++)
        cout<<v[h[i]]<<' ';*/
    }
    /*cout<<'\n';
    for (int i=1; i<=nr; i++)
        cout<<v[i]<<' ';*/
    return 0;
}