Cod sursa(job #3243216)

Utilizator Laura139Anghel Laura Laura139 Data 16 septembrie 2024 16:24:37
Problema Heapuri Scor 10
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.63 kb
#include <fstream>

using namespace std;

ifstream cin("heapuri.in");
ofstream cout("heapuri.out");

struct nod
{
    int val, poz;
};

nod v[200005];

int f[200005];

int main()
{
    int q, n=0, p=0, m=0;
    cin>>q;
    for(int k=1; k<=q; k++)
    {
        int c;
        cin>>c;
        if(c==3)
            cout<<v[1].val<<'\n';
        else
        {
            if(c==1)
            {
                //insert
                int val;
                cin>>val;
                v[++n].val=val;
                m++;
                v[n].poz=m;
                int cn=n;
                while(cn!=1)
                {
                    if(v[cn].val<v[cn/2].val)
                        swap(v[cn], v[cn/2]);
                    cn=cn/2;
                }
            }
            else
            {
                //erase
                int poz;
                cin>>poz;
                f[poz]++;
                if(f[v[1].poz]!=0)
                {
                    swap(v[1], v[n]);
                    n--;
                }
                while(f[v[1].poz]!=0)
                {
                    int cn=1;
                    while(cn<=n)
                    {
                        int ram=0;
                        if(v[cn*2].val>v[cn*2+1].val)
                            ram=cn*2+1;
                        else
                            ram=cn*2;

                        if(v[cn].val>v[ram].val)
                            swap(v[cn], v[ram]);
                        cn=ram;
                    }
                }
            }
        }
    }
    return 0;
}