Pagini recente » Cod sursa (job #1397316) | Cod sursa (job #2138206) | Cod sursa (job #2586812) | Cod sursa (job #1086216) | Cod sursa (job #1231324)
#include <cstdio>
#define N 200010
using namespace std;
int n,i,cod,val,t,lg,x[N],h[N],p[N];
void heap_down(int),heap_up(int),swap(int,int);
int main()
{
freopen("heapuri.in","r",stdin);
freopen("heapuri.out","w",stdout);
scanf("%d",&n);
for(;n;n--)
{
scanf("%d",&cod);
if(cod==1)
{
scanf("%d",&val);
x[++t]=val;
p[t]=++lg;
h[lg]=t;
heap_up(lg);
continue;
}
if(cod==2)
{
scanf("%d",&val);
int poz=p[val];
swap(poz,lg);
lg--;
heap_up(poz);
heap_down(poz);
continue;
}
printf("%d\n",x[h[1]]);
}
return 0;
}
void heap_up(int nod)
{
int tata=nod/2;
if(!tata)return;
if(x[h[tata]]>x[h[nod]])
{
swap(nod,tata);
heap_up(tata);
}
}
void heap_down(int nod)
{
int fiu=2*nod;
if(fiu>lg)return;
if(fiu<lg)
if(x[h[fiu]]>x[h[fiu+1]])
fiu++;
if(x[h[fiu]]<x[h[nod]])
{
swap(fiu,nod);
heap_down(fiu);
}
}
void swap(int i,int j)
{
int aux=h[i];h[i]=h[j];h[j]=aux;
p[h[i]]=i;
p[h[j]]=j;
}