Pagini recente » Cod sursa (job #3194847) | Cod sursa (job #1878324) | Cod sursa (job #2667840) | Cod sursa (job #1228520) | Cod sursa (job #1191453)
#include <iostream>
#include <fstream>
using namespace std;
fstream in("heapuri.in",ios::in),out("heapuri.out",ios::out);
const int N=1+2e5;
int v[N],h[N],poz[N],n,nv,nh;
void schimba(int q,int p){
int aux = h[p];
h[p] = h[q];
h[q] = aux;
poz[h[p]]=p;
poz[h[q]]=q;
}
void up(int p){
while(p>1 && v[h[p]]<v[h[p/2]]){
schimba(p,p/2);
p/=2;
}
}
void down(int p){
int fs=2*p,fd=2*p+1,bun=p;
if(fs<=nh && v[h[fs]]<v[h[bun]])
bun=fs;
if(fd<=nh && v[h[fd]]<v[h[bun]])
bun=fd;
if(bun!=p){
schimba(p,bun);
down(bun);
}
}
void push(int x){
h[++nh]=x;
poz[x]=nh;
up(nh);
}
void pop(int p){
schimba(p,nh--);
up(p);
down(p);
}
int main()
{
int f,x;
in>>n;
for(int i=1 ; i<=n ; i++){
in>>f;
if(f==1){
in>>x;
v[++nv]=x;
push(nv);
}
if(f==2){
in>>x;
if(poz[x])
pop(poz[x]);
}
if(f==3){
out<<v[h[1]]<<"\n";
}
}
return 0;
}