Cod sursa(job #3305981)

Utilizator Tudor_CCTudor Cocu Tudor_CC Data 6 august 2025 12:44:53
Problema Heapuri Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.43 kb
#include <bits/stdc++.h>

using namespace std;

int s[200055];

int v[200055];

int f[200055];

int in=0;

int n,c,x,ix=0;

void up(int k)
{
    int i=k;
    while(i>1 && v[s[i]]<v[s[i/2]])
    {
        f[s[i]]=i/2;
        f[s[i/2]]=i;
        swap(s[i],s[i/2]);
        i=i/2;
    }
}

void dn(int k)
{
    int i=k;
    bool ok=true;
    while(ok)
    {
        ok=false;
        int ii=i*2;
        if(i*2<=in && i*2+1<=in && v[s[i*2+1]]<v[s[i*2]])
        {
            ii=i*2+1;
        }
        if(ii<=in && v[s[i]]>v[s[ii]])
        {
                    f[s[i]]=ii;
        f[s[ii]]=i;
            swap(s[i],s[ii]);
            i=ii;
            ok=true;

        }
    }
}

int main()
{
    ifstream cin("heapuri.in");
    ofstream cout("heapuri.out");
    cin>>n;
    for(int i=1;i<=n;++i)
    {
        cin>>c;
        if(c==1)
        {
            cin>>x;
                    ++ix;
        v[ix]=x;
            ++in;
            s[in]=ix;
            f[ix]=in;
            up(in);
            if(x==2)
            {
                //cout<<v[s[1]]<<" "<<in<<"     ";
            }
        }
        else if(c==2)
        {
            cin>>x;
            f[s[in]]=f[x];
            swap(s[f[x]],s[in]);
            --in;
            up(f[x]);
            dn(f[x]);
        }
        else
        {
            cout<<v[s[1]]<<"\n";
        }
    }
    return 0;
}