Cod sursa(job #2930369)

Utilizator AlexSerban21Serban Alexandru AlexSerban21 Data 28 octombrie 2022 11:41:17
Problema Heapuri Scor 40
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.33 kb
#include <fstream>
using namespace std;
ifstream fin ("heapuri.in");
ofstream fout ("heapuri.out");
struct element
{
    int nr,poz;
};
int nrr,n,ii,k,pozitia,q,intrat[200005],i,x,nr,p,ch;
element v[400005];
int main()
{
    fin>>nrr;
    n=0;
    for (ii=1; ii<=nrr; ii++)
    {
        fin>>ch;
        if (ch==3)
        {
            fout<<v[1].nr<<"\n";
            continue;
        }
        if (ch==1)
        {
            fin>>x;
            n++;
            v[n].nr=x;
            q++;
            v[n].poz=q;
            intrat[q]=n;
            i=n;
            while (i>1&&v[i].nr<v[i/2].nr)
            {
                swap (intrat[v[i].poz],intrat[v[i/2].poz]);
                swap (v[i],v[i/2]);
                i=i/2;
            }
            continue;
        }
        fin>>x;
        pozitia=intrat[x];
        intrat[v[n].poz]=pozitia;
        v[pozitia]=v[n];
        n--;
        p=pozitia;
        nr=p*2;
        while (nr<=n)
        {
            if (nr+1<=n&&v[nr+1].nr<v[nr].nr)
                nr++;
            if (v[p].nr>v[nr].nr)
            {
                swap (intrat[v[p].poz],intrat[v[nr].poz]);
                swap (v[p],v[nr]);
            }
            else
                break;
            p=nr;
            nr=nr*2;
        }
    }
    return 0;
}