Cod sursa(job #3321590)

Utilizator DasapSapunaru Daniel Dasap Data 10 noiembrie 2025 12:25:18
Problema Heapuri Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.2 kb
#include<iostream>
#include<fstream>
using namespace std;
ifstream fin ("heapuri.in");
ofstream fout ("heapuri.out");
struct nod{
    int val,idx;
}v[200001];int n,k,i,j,x,y,cnt,poz[200001],sz,son;
void warp(int nod1,int nod2){
    swap(v[nod1],v[nod2]);
    swap(poz[v[nod1].idx],poz[v[nod2].idx]);
}
void ver_up(int nod){
    while(nod>1&&v[nod].val<v[nod/2].val){
        warp(nod,nod/2);
        nod/=2;
    }
}
void ver_down(int nod){
    son=-1;
    if(nod*2<=sz){
        son=nod*2;
        if(nod*2+1<=sz&&v[nod*2+1].val<v[son].val)
            son=nod*2+1;
    }
    if(son==-1)return;
    if(v[son].val<v[nod].val){
        warp(son,nod);
        ver_down(son);
    }
}
void add_elem(int val,int p){
    sz++;
    v[sz].val=val;
    v[sz].idx=p;
    poz[p]=sz;
    ver_up(sz);
}
void delete_elem(int p){
    int idx=poz[p];
    warp(sz,idx);
    sz--;
    ver_up(idx);
    ver_down(idx);
}
int main()
{
    fin>>k;
    for(i=1;i<=k;i++){
        fin>>x;
        if(x==3){fout<<v[1].val<<'\n';continue;}
        fin>>y;
        if(x==2){
            delete_elem(y);
            continue;
        }
        cnt++;
        add_elem(y,cnt);
    }
    return 0;
}