Cod sursa(job #2861497)

Utilizator alexmorosanuMorosanu Alexandru alexmorosanu Data 4 martie 2022 08:31:23
Problema Heapuri Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.06 kb
#include <fstream>
#define INF 1000000001
using namespace std;
ifstream f("heapuri.in");
ofstream g("heapuri.out");
int a[200011],m,arb[200011],coord[200011];
void insus(int k)
{
    if(k==1)
        return;
    if(a[arb[k]]<a[arb[k/2]])
        {
            swap(coord[arb[k/2]],coord[arb[k]]);
            swap(arb[k/2],arb[k]);
            insus(k/2);
        }
}
void injos(int k)
{
    int x=2*k;
    if(x>m)
        return;
    if(x+1<=m && a[arb[x+1]]<a[arb[x]])
        x++;
    if(a[arb[k]]>a[arb[x]])
    {
        swap(coord[arb[k]],coord[arb[x]]);
        swap(arb[k],arb[x]);
        injos(x);
    }
}
int n,i,C,x;
int main()
{
    f>>n;
    for(i=1;i<=n;i++)
    {
        f>>C;
        if(C==1)
        {
            m++;
            f>>a[m];
            arb[m]=m;
            coord[m]=m;
            insus(m);
        }
        else
        if(C==2)
        {
            f>>x;
            a[x]=INF;
            injos(coord[x]);
        }
        else
            g<<a[arb[1]]<<'\n';
    }
    return 0;
}