Cod sursa(job #2559130)

Utilizator RaaaulBaciulescu Raul Raaaul Data 27 februarie 2020 00:57:25
Problema Heapuri Scor 40
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.15 kb
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin ("heapuri.in");
ofstream fout ("heapuri.out");
int heap[200002], n, f[200002];
void UpHeap (int x)
{
    int tata = x / 2;
    if (tata && heap[x] < heap[tata])
        swap (heap[x], heap[tata]), UpHeap (tata);
}
void add (int val)
{
    n ++;
    heap[n] = val;
    UpHeap (n);
}
void DownHeap (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]), DownHeap(fiu);
}
void pop (int val)
{
    int x = 1;
    while (heap[x] != val)
        x ++;

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