Cod sursa(job #2423478)

Utilizator andrei42Oandrei42O andrei42O Data 21 mai 2019 15:47:26
Problema Heapuri Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.33 kb
#include <bits/stdc++.h>
using namespace std;
const int N = 200010;
ifstream f("heapuri.in");
ofstream g("heapuri.out");
int n, q, o, t, heap[N], v[N], poz[N];
void heap_up(int), heap_down(int), heap_swap(int, int);
int main()
{
    f >> q;
    for(; q; q--)
    {
        f >> o;
        if(o == 1)
        {
            t++;
            f >> v[t];
            n++;
            heap[n] = t;
            poz[t] = n;
            heap_up(n);
        }
        else if(o == 2)
        {
            int p;
            f >> p;
            p = poz[p];
            heap_swap(p, n);
            n--;
            heap_up(p);
            heap_down(p);
        }
        else
            g << v[heap[1]] << '\n';
    }
    return 0;
}
void heap_up(int fiu)
{
    int tata = fiu/2;
    if(!tata)
        return;
    if(v[heap[fiu]] < v[heap[tata]])
    {
        heap_swap(tata, fiu);
        heap_up(tata);
    }
}
void heap_down(int tata)
{
    int fiu = tata * 2;
    if(fiu > n)
        return;
    if(fiu < n)
    {
        if(v[heap[fiu]] > v[heap[fiu + 1]])
            fiu++;
    }
    if(v[heap[fiu]] < v[heap[tata]])
    {
        heap_swap(tata, fiu);
        heap_down(fiu);
    }
}
void heap_swap(int i, int j)
{
    swap(heap[i], heap[j]);
    poz[heap[i]] = i;
    poz[heap[j]] = j;
}