Pagini recente » Cod sursa (job #330133) | Cod sursa (job #383348) | Cod sursa (job #2587640) | Cod sursa (job #2051624) | Cod sursa (job #584032)
Cod sursa(job #584032)
#include<stdio.h>
int n,crt,nr, a[200010], h[200010], p[200010];
void push(int x)
{
int aux;
while (x/2 && a[h[x]]<a[h[x/2]])
{
aux=h[x];
h[x]=h[x/2];
h[x/2]=aux;
p[h[x]]=x;
p[h[x/2]]=x/2;
x/=2;
}
}
void pop(int x)
{
int aux,y=0;
while (x!=y)
{
y=x;
if (y*2<=crt && a[h[x]]>a[h[y*2]])
x=y*2;
if (y*2+1<=crt && a[h[x]]>a[h[y*2+1]])
x=y*2+1;
aux=h[x];
h[x]=h[y];
h[y]=aux;
p[h[x]]=x;
p[h[y]]=y;
}
}
int main()
{
freopen("heapuri.in", "r", stdin);
freopen("heapuri.out", "w", stdout);
int i,x,k;
scanf("%d ",&n);
for (i=0; i<n; i++)
{
scanf("%d ",&k);
switch(k)
{
case 1:
scanf("%d ", &x);
crt++;
nr++;
a[nr]=x;
h[crt]=nr;
p[nr]=crt;
push(crt);
break;
case 2:
scanf("%d ", &x);
a[x]=-1;
push(p[x]);
p[h[1]]=0;
h[1]=h[crt--];
p[h[1]]=1;
if (crt>1)
pop(1);
break;
case 3:
printf("%d\n", a[h[1]]);
}
}
return 0;
}