Cod sursa(job #2891442)

Utilizator neagamariaMaria Neaga-Budoiu neagamaria Data 18 aprilie 2022 18:14:22
Problema Heapuri Scor 10
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.71 kb
#include <iostream>
#include <fstream>
#include <vector>

using namespace std;

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

int n, cerinta;
struct element
{
    int info;
    int index;
}x;

vector <element>v;

void inserare_Heap(element x)
{
    v.push_back(x);
    int k=v.size()-1;
    while(k>1)
    {
        if(v[k].info<=v[k/2].info)
        {
            x=v[k];
            v[k]=v[k/2];
            v[k/2]=x;
            k=k/2;
        }
        else
            return;
    }
}

void eliminare_Heap(int ind)
{
    int poz=-1;
    for(int i=1; i<=n; i++)
    {
        if(v[i].index==ind)
        {
            poz=i;
            //out<<i<<" "<<v[i].info<<endl;
            break;
        }
    }
    if(poz!=-1)
    {
        element aux;
        int k=v.size()-1;
        v[poz]=v[k];
        v.pop_back();
        while(poz>1 && v[poz].info<=v[poz/2].info)
        {
            aux=v[poz];
            v[poz]=v[poz/2];
            v[poz/2]=aux;
            poz=poz/2;
        }

        while(poz<k && 2*poz<=k && v[poz].info>=v[2*poz].info)
        {
            aux=v[poz];
            v[poz]=v[2*poz];
            v[2*poz]=aux;
            poz=2*poz;
        }


    }
}


int main()
{
    in>>n;
    int cnt=1;
    v.push_back(x);
    for(int i=1; i<=n; i++)
    {
        in>>cerinta;
        if(cerinta==1)
        {
            in>>x.info;
            x.index=cnt;
            cnt++;
            inserare_Heap(x);
        }
        else if(cerinta==2)
        {
            int ind;
            in>>ind;
            eliminare_Heap(ind);
        }
        else
            out<<v[1].info<<endl;
    }
    return 0;
}