Pagini recente » Cod sursa (job #1937113) | Cod sursa (job #3219229) | Cod sursa (job #132295) | Cod sursa (job #1339948) | Cod sursa (job #708552)
Cod sursa(job #708552)
#include<cstdio>
#define nmax 200001
int n,cod,x,heap[nmax],poz[nmax],ord[nmax],nr,ncrt;
void insert(int val)
{
int child, dad, aux;
child=++nr;
heap[child]=val;
poz[child]=child;
ord[child]=++ncrt;
if(child==1)
return;
else
for(;;)
{
dad=child/2;
if(heap[poz[dad]]<=heap[poz[child]])
return;
aux=poz[dad];
poz[dad]=poz[child];
poz[child]=aux;
ord[poz[dad]]=dad;
ord[poz[child]]=child;
child=dad;
}
}
void refresh(int dad)
{
int child=2*dad;
int val=poz[dad];
while(child<=nr)
{
if(child<nr)
if(heap[poz[child]]>heap[poz[child+1]])
child++;
if(heap[poz[dad]]>heap[poz[child]])
{
poz[dad]=poz[child];
dad=child;
child=2*child;
}
else
break;
}
poz[dad]=val;
}
int main()
{
int i;
freopen("heapuri.in","r",stdin);
freopen("heapuri.out","w",stdout);
scanf("%d", &n);
for(i=1;i<=n;i++)
{
scanf("%d", &cod);
if(cod<3)
{
scanf("%d", &x);
if(cod==1)
insert(x);
else
{
poz[ord[x]]=poz[nr];
nr--;
refresh(ord[x]);
ord[x]=0;
}
}
else
printf("%d\n", heap[poz[1]]);
}
return 0;
}