Cod sursa(job #2618729)

Utilizator raresmateiuMateiu Rares-Ioan raresmateiu Data 25 mai 2020 20:44:57
Problema Heapuri Scor 40
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.1 kb
#include <iostream>
#include <fstream>

using namespace std;

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

int heap[200002], n, f[200002];
void Up (int x)
{
    int tata = x / 2;
    if (tata && heap[x] < heap[tata])
        swap (heap[x], heap[tata]), Up (tata);
}
void add (int val)
{
    n ++;
    heap[n] = val;
    Up(n);
}
void Down (int x)
{
    int fiu = 2 * x;
    if (fiu < n && heap[fiu + 1] < heap[fiu])
        fiu ++;
    if (fiu <= n && heap[x] > heap[fiu])
        swap (heap[x], heap[fiu]), Down(fiu);
}
void pop (int val)
{
    int x = 1;
    while (heap[x] != val)
        x ++;

    heap[x] = heap[n];
    n --;
    Down (x);
    Up (x);
}
int main ()
{
    int m, i, val, nr = 0, op;
    fin >> m;
    for (i = 1; i <= m; i ++)
    {
        fin >> op;
        if (op == 1)
        {
            fin >> val;
            f[++ nr] = val;
            add (val);
        }
        if (op == 2)
        {
            fin >> val;
            pop (f[val]);
        }
        if (op == 3)
            fout << heap[1] << "\n";
    }
}