Cod sursa(job #2290116)

Utilizator alexnigaNiga Alexandru alexniga Data 25 noiembrie 2018 19:38:29
Problema Heapuri Scor 40
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.45 kb
#include <iostream>
#include <fstream>
#include <algorithm>

using namespace std;

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

struct heap
{
    int num, poz;
}x[200010];

int a[200010];


void push(int pas)
{
    while ( pas > 1 && x[pas / 2].num > x[pas].num)
    {

        swap(x[pas], x[pas / 2]);

        a[x[pas].poz] = pas;
        a[x[pas / 2].poz] = pas / 2;
        pas /= 2;

    }
}

void pop(int pas, int &k)
{
    swap(x[pas], x[k]);
    a[x[pas].poz] = pas;
    k--;
    int aux;

    while (pas != aux)
    {
        aux = pas;

        if (2 * aux <= k && x[pas].num > x[aux * 2].num)
            pas = 2 * aux;

        if (2 * aux + 1 <= k && x[pas].num > x[2 * aux + 1].num)
            pas = 2 * aux + 1;

        swap(x[pas], x[aux]);
        a[x[pas].poz] = pas;
        a[x[aux].poz] = aux;

    }
}

int main()
{
    int n, i, j, pas, verf, nr, k = 0, numar = 0;
    f >> n;

    for (i = 0; i < n; ++i)
    {
        f >> verf;
        if (verf != 3)
        {
            f >> nr;

            if( verf == 1)
            {
                ++k; ++numar;
                x[k].num = nr;
                x[k].poz = numar;
                a[x[k].poz] = k;
                pas = k;
                push(pas);
            }
            else
            {
                pop(a[nr], k);
            }
    }
    else
        g << x[1].num << "\n";

}



return 0;
}