Pagini recente » Cod sursa (job #2331747) | Cod sursa (job #544445) | Cod sursa (job #2694047) | Cod sursa (job #1191369) | Cod sursa (job #339986)
Cod sursa(job #339986)
#include<cstdio>
#define N 200001
struct heap{int v,p;}h[N],aux,key;
int n;
void cobor(int k)
{
int fiu;
do
{
fiu=0;
if (2*k<=n)
{
fiu=2*k;
if (2*k+1&&h[fiu].v>h[2*k+1].v)
fiu=2*k+1;
if(h[fiu].v>h[k].v)
fiu=0;
}
if (fiu)
{
aux=h[k];
h[k]=h[fiu];
h[fiu]=aux;
k=fiu;
}
}
while (fiu);
}
void urc(int k)
{
key=h[k];
while (k-1&&key.v<h[k/2].v)
{
h[k]=h[k/2];
k/=2;
}
h[k]=key;
}
void cut(int k)
{
h[k]=h[n];
--n;
if (k-1&&h[k].v<h[k/2].v)
urc(k);
else
cobor(k);
}
void insert(int x)
{
h[++n].v=x;
h[n].p=n;
urc(n);
}
void cut1(int k)
{
for (int i=1; i<=n; ++i)
if (h[i].p==k)
{
cut(i);
return;
}
}
void citire()
{
freopen("heapuri.in","r",stdin);
freopen("heapuri.out","w",stdout);
int c;
scanf("%d",&c);
while (c)
{
--c;
int w,c1;
scanf("%d",&w);
if (w==1)
{
scanf("%d",&c1);
insert(c1);
continue;
}
if (w==2)
{
scanf("%d",&c1);
cut1(c1);
continue;
}
if (w==3)
{
printf("%d\n",h[1].v);
continue;
}
}
}
int main()
{
citire();
return 0;
}