Cod sursa(job #3362586)

Utilizator Zeno1789Zeno Ciuca Zeno1789 Data 10 august 2026 17:11:36
Problema Heapuri Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.38 kb
#include <fstream>
#include <algorithm>
#define int long long
using namespace std;

ifstream cin ("heapuri.in");
ofstream cout ("heapuri.out");

int v[200005],pos[200005],h[200005];
int h_size=0,insert_cnt=0;

void swap_nodes(int i,int j) {
    swap(h[i], h[j]);
    pos[h[i]]=i;
    pos[h[j]]=j;
}

void up(int i) {
    while (i>1 && v[h[i]]<v[h[i/2]]) {
        swap_nodes(i,i/2);
        i=i/2;
    }
}

void down(int i) {
    while (2*i<=h_size) {
        int son=2*i;
        if (son+1<=h_size && v[h[son+1]]<v[h[son]]) {
            son=son+1;
        }
        if (v[h[son]]<v[h[i]]) {
            swap_nodes(i,son);
            i=son;
        } else {
            break;
        }
    }
}

int32_t main() {
    int n;
    cin>>n;
    for (int k=1; k<=n; k++) {
        int op;
        cin>>op;
        if (op==1) {
            int x;
            cin>>x;
            insert_cnt++;
            v[insert_cnt]=x;
            h_size++;
            h[h_size]=insert_cnt;
            pos[insert_cnt]=h_size;
            up(h_size);
        } else if (op==2) {
            int x;
            cin>>x;
            int p=pos[x];
            swap_nodes(p,h_size);
            h_size--;
            if (p<=h_size) {
                up(p);
                down(p);
            }
        } else {
            cout<<v[h[1]]<<"\n";
        }
    }
}