Cod sursa(job #3305232)

Utilizator Gabriel_DaescuDaescu Gabriel Florin Gabriel_Daescu Data 30 iulie 2025 23:38:58
Problema Heapuri Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.27 kb
#include <fstream>
#define NMAX 200002
using namespace std;
ifstream  fin("heapuri.in");
ofstream fout("heapuri.out");
int N,H,v[NMAX],heap[NMAX],sters[NMAX];

void urcare(int poz)
{
    while(poz/2>=1 && v[heap[poz]]<v[heap[poz/2]])
    {
        swap(heap[poz],heap[poz/2]);
        poz=poz/2;
    }
}

void coborare(int poz)
{
    while(2*poz<=H)
    {
        int r=2*poz;

        if(r+1<=H && v[heap[r+1]]<v[heap[r]])
        {
            r++;
        }

        if(v[heap[poz]]>v[heap[r]])
        {
            swap(heap[poz],heap[r]);
            poz=r;
        }
        else
        {
            break;
        }
    }
}

void eliminare_minim()
{
    heap[1]=heap[H];
    H--;
    coborare(1);
}

int main()
{
    fin>>N;

    int ind,tip,x;
    ind=0;
    for(int i=1; i<=N; i++)
    {
        fin>>tip;

        if(tip==1)
        {
            fin>>v[++ind];
            heap[++H]=ind;
            urcare(H);
        }

        if(tip==2)
        {
            fin>>x;
            sters[x]=1;
        }

        if(tip==3)
        {
            while(H && sters[heap[1]])
            {
                eliminare_minim();
            }
            fout<< v[heap[1]] << "\n";
        }
    }

    return 0;
}