Pagini recente » Cod sursa (job #2184088) | Cod sursa (job #497148) | Cod sursa (job #2390756) | Cod sursa (job #2490005) | Cod sursa (job #3321590)
#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;
}