Cod sursa(job #3315018)

Utilizator Mihaita09Nechitescu Mihai Mihaita09 Data 11 octombrie 2025 21:22:14
Problema Heapuri Scor 40
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.56 kb
#include <bits/stdc++.h>
using namespace std;

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

#define cin fin
#define cout fout

int n,m,v[200001];
int _size;
int op,x,a[200001],ordine;

int father(int nod)
{
    return nod/2;
}
int left(int nod)
{
    return nod*2;
}
int right(int nod)
{
    return nod*2+1;
}

void shift_up(int i)
{
    if (i > _size) return;
    if (i == 1) return;
    if (v[i] < v[father(i)])
    {
        swap(v[i],v[father(i)]);
    }
    shift_up(father(i));
}

void shift_down(int i)
{
    if (i > _size) return;
    int swapID = i;
    if (left(i) <= _size && v[left(i)] < v[i]) swapID=left(i);
    if (right(i) <= _size && v[right(i)] < v[swapID]) swapID=right(i);
    if (swapID != i) {swap(v[i],v[swapID]);
                      shift_down(swapID);}
    return;
}




int main() {
    cin >> n;
    v[_size] = -1;
    for (int i = 1; i <= n; i++)
    {
        cin >> op;
        if (op == 1)
        {
            cin >> x;
            a[++ordine] = x;
            v[++_size] = x;
            shift_up(_size);
        }
        if (op == 2)
        {
            cin >> x;
            for (int i = 1; i <= n; i++)
            {
                if (v[i] == a[x]) {x=i;
                                    break;}
            }
            if (x!=-1){
            swap(v[x],v[_size]);
            _size--;
            shift_down(x);
            shift_up(x);
            }
        }
        if (op == 3)
        {
            cout << v[1] << endl;
        }
    }

}