Cod sursa(job #2614566)

Utilizator DeliaGhergheGherghe Ioana-Delia DeliaGherghe Data 11 mai 2020 22:03:44
Problema Heapuri Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.91 kb
#include <iostream>
#include <fstream>
using namespace std;

int HP[200000],Val[200000],P[200000],nhp,np,nv, nr;

void heapup(int poz)
{
    int i = poz;
    while(i > 1 && Val[HP[i]] < Val[HP[i/2]])
    {
        int aux = HP[i];
        HP[i] = HP[i/2];
        HP[i/2] = aux;

        P[HP[i]] = i;
        P[HP[i/2]] = i/2;

        i = i/2;
    }
}

void heapdown(int poz)
{
    int i = poz, j = 1;
    while (i < nhp && j )
    {
        j = 0;
        if (2*i <= nhp && Val[HP[2*i]] < Val[HP[i]])
            j = 2*i;
        if (2*i + 1 <= nhp && Val[HP[2*i+1]] < Val[HP[i]] && Val[HP[2*i+1]] < Val[HP[2*i]])
            j = 2*i + 1;
        if (j)
        {
            int aux = HP[i];
            HP[i] = HP[j];
            HP[j] = aux;

            P[HP[i]] = i;
            P[HP[j]] = j;

            i = j;
        }
    }
}

void pushHP(int x)
{
    nr++;
    Val[nr] = x;
    nhp++;
    HP[nhp] = nr;
    P[nr] = nhp;
    heapup(nhp);
}

void popHP(int ord)
{
    //Val[ord] = -1;
    int poz = P[ord];
    HP[poz] = HP[nhp];
    P[HP[nhp]] = poz;
    nhp--;
    //P[ord] = -1;
    heapup(poz);
    heapdown(poz);
}

int main()
{
    ifstream fin("heapuri.in");
    ofstream fout("heapuri.out");

    int N,i,x,op,ord;

    fin >> N;
    for (i = 0; i < N; i++)
    {
        fin >> op;
        if (op == 1)
        {
            fin >> x;
            pushHP(x);
        }
        else if (op == 2)
        {
            fin >> ord;
            popHP(ord);
        }
        else if (op == 3)
            fout << Val[HP[1]] << '\n';
    }

    /*for(i = 1; i <= nhp; i++)
        cout << HP[i] << " ";
    cout << endl;
    for(i = 1; i <= nr; i++)
        cout << Val[i] << " ";
    cout << endl;
    for(i = 1; i <= nhp; i++)
        cout << P[i] << " ";
    cout << endl;

    fin.close();
    fout.close();*/


    return 0;
}