Pagini recente » Cod sursa (job #1734567) | Cod sursa (job #1606721) | Cod sursa (job #313092) | Cod sursa (job #1033045) | Cod sursa (job #1155744)
#include <cstdio>
using namespace std;
int heap[524301],a[200002],ph[200002],caz,poz,t,n,i;
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,nod/2);push(nod/2);}
}
void pop(int nod)
{
if(a[heap[nod*2]]<a[heap[nod*2+1]]){change(nod,nod*2);pop(nod*2);return;}
else{if(a[heap[nod*2+1]]!=999999){change(nod,nod*2+1);pop(nod*2+1);return;}}
heap[nod]=200001;return;
}
int main()
{
freopen("heapuri.in","r",stdin);
freopen("heapuri.out","w",stdout);
scanf("%ld",&t);a[0]=-1;a[200001]=999999;
for(i=1;i<=524300;i++){heap[i]=200001;}
while(t--){
scanf("%ld",&caz);
if(caz==1){
scanf("%ld",&a[++n]);
heap[n]=n;ph[n]=n;
push(n);
}
if(caz==2){
scanf("%ld",&poz);
pop(ph[poz]);
}
if(caz==3){
printf("%ld\n",a[heap[1]]);
}
}
return 0;
}