Pagini recente » Cod sursa (job #2388265) | Cod sursa (job #1681078) | Cod sursa (job #2213590) | Cod sursa (job #2458420) | Cod sursa (job #1155765)
#include <cstdio>
using namespace std;
int heap[524301],a[524301],ph[524301],t,n,poz,i,caz;
void change(int n1, int n2)
{
int aux=ph[heap[n1]];
ph[heap[n1]]=ph[heap[n2]];
ph[heap[n2]]=aux;
aux=heap[n1];
heap[n1]=heap[n2];
heap[n2]=aux;
}
void push(int nod)
{
if(a[heap[nod/2]]>a[heap[nod]]){
change(nod/2,nod);
push(nod/2);
}
}
void pop(int nod)
{
if((a[heap[nod*2]]<a[heap[nod*2+1]])&&(a[heap[nod*2]]<a[heap[nod]])){
change(nod*2,nod);
pop(nod*2);
}
if((a[heap[nod*2+1]]<a[heap[nod*2]])&&(a[heap[nod*2+1]]<a[heap[nod]])){
change(nod*2+1,nod);
pop(nod*2+1);
}
}
int main()
{
freopen("heapuri.in","r",stdin);
freopen("heapuri.out","w",stdout);
scanf("%ld",&t);
for(i=1;i<=524300;i++){
heap[i]=i;a[i]=200001;ph[i]=i;
}
a[0]=-1;
while(t--){
scanf("%ld",&caz);
if(caz==1){
scanf("%ld",&a[++n]);
push(ph[n]);
}
if(caz==2){
scanf("%ld",&poz);
a[poz]=200001;
pop(ph[poz]);
}
if(caz==3){
printf("%ld\n",a[heap[1]]);
}
}
return 0;
}