Cod sursa(job #2955178)

Utilizator emiliamariamihut@gmail.comMihut Emilia [email protected] Data 16 decembrie 2022 15:25:48
Problema Heapuri Scor 10
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.12 kb
#include <fstream>
#define NMAX 200000
using namespace std;

ifstream fin("heapuri.in");
ofstream fout("heapuri.out");
int n,cnt,x,nr[NMAX],p,H[NMAX];

void inserare(int x);
void stergere(int x);
int main()
{
    int i,p=0,cer;
    fin>>n;
    for(i=1; i<=n; i++)
    {
        fin>>cer;
        if(cer==1)
        {
            fin>>nr[++p];

            inserare(p);

        }
        else if(cer==2)
        {
            fin>>x;
            stergere(x);
        }
        else if(cer==3)
        {
           fout<<nr[H[1]]<<'\n';
        }

    }
    return 0;
}
void inserare(int x)
{
    int poz=cnt+1;
    int tpoz=poz/2;
    while(tpoz>0 && nr[H[tpoz]]>nr[x])
    {
        H[poz]=H[tpoz];
        poz=tpoz;
        tpoz=poz/2;
    }
    H[poz]=x;
    cnt++;
}
void stergere(int x)
{
    int i,poz,tpoz;
    for(i=1;i<=cnt;i++)
        if(H[i]==x)
    {
        H[i]=H[cnt];
        cnt--;
        tpoz=i;
        poz=2*i;
        while(poz<=cnt && nr[H[tpoz]]>nr[x])
        {
            H[tpoz]=H[poz];
            tpoz=poz;
            poz=tpoz*2;
        }

    }
}