//
// Created by Octavian Farcasi on 18.05.2023.
//
#include<iostream>
#include<fstream>
#include<vector>
#include<map>
void heapify(std::vector<int>&v,long pozitii_heap[],int pozitie_curenta){
int nod_stang=2*pozitie_curenta+1,nod_drept=nod_stang+1, pozitie_minim=pozitie_curenta;
if(v.size()>nod_stang && v[pozitie_minim]>v[nod_stang])
pozitie_minim=nod_stang;
if(v.size()>nod_drept && v[pozitie_minim]>v[nod_drept])
pozitie_minim=nod_drept;
if(pozitie_minim!=pozitie_curenta){
std::swap(v[pozitie_curenta],v[pozitie_minim]);
pozitii_heap[v[pozitie_curenta]]=pozitie_curenta;
pozitii_heap[v[pozitie_minim]]=pozitie_minim;
heapify(v,pozitii_heap,pozitie_minim);
}
}
void inserare(std::vector<int>&v,std::vector<int>&elem,long pozitii_heap[],int valoare){
pozitii_heap[valoare]=elem.size();
v.push_back(valoare);
elem.push_back(valoare);
for(int i=v.size()/2-1;i>=0;i--)
heapify(v,pozitii_heap,i);
}
void stergere(std::vector<int>&v, std::vector<int>&elem, long pozitii_heap[], int x){
int index=pozitii_heap[elem[x-1]];
std::swap(v[index],v[v.size()-1]);
v.pop_back();
heapify(v,pozitii_heap,index);
}
int main(){
std::ifstream f("heapuri.in");
std::ofstream g("heapuri.out");
int n, operatie, valoare,ok=0; long poz_heap[1000000000];
std::vector<int>v; //heap-ul
std::vector<int>ordinea_inserarii; //primesc o pozitie si returnez un element
std::map<int,int>pozitii_heap; //primesc un element si returnez o pozitie;
f>>n;
while(n>0){
f>>operatie;
switch (operatie) {
case 1:
f>>valoare;
inserare(v,ordinea_inserarii,poz_heap,valoare);
break;
case 2:
f>>valoare;
stergere(v,ordinea_inserarii,poz_heap,valoare);
break;
case 3:
if(ok) {
g << "\n";
}
g<<v[0];
ok=1;
break;
}
n--;
}
// inserare(v,ordinea_inserarii,pozitii_heap,3);
// inserare(v,ordinea_inserarii,pozitii_heap,9);
// inserare(v,ordinea_inserarii,pozitii_heap,2);
// inserare(v,ordinea_inserarii,pozitii_heap,1);
// inserare(v,ordinea_inserarii,pozitii_heap,4);
// inserare(v,ordinea_inserarii,pozitii_heap,5);
// for(auto &i:v)
// std::cout<<i<<" ";
// std::cout<<"\n";
// stergere(v,ordinea_inserarii,pozitii_heap,1);
//
// for(auto &i:v)
// std::cout<<i<<" ";
// std::cout<<"\n";
f.close();
g.close();
return 0;
}