Pagini recente » Cod sursa (job #2595735) | Cod sursa (job #3279174) | Cod sursa (job #344687) | Cod sursa (job #586778) | Cod sursa (job #545579)
Cod sursa(job #545579)
#include<stdio.h>
int a[200101],b[200101];
void h_up(int n,int m)
{
int d=1,x;
while(d && m>1)
{
d=0;
if(a[m]<a[m/2])
{
x=a[m];
a[m]=a[m/2];
a[m/2]=x;
m/=2;
}
}
}
void h_down(int n, int m)
{
int fiu,x;
do
{
fiu=0;
if(m*2<=n)
{
fiu=m*2;
if(fiu<n && a[fiu+1]<a[fiu])
fiu++;
else;
if(a[fiu]<a[m])
{
x=a[fiu];
a[fiu]=a[m];
a[m]=x;
m=fiu;
}
else
fiu=0;
}
}while(fiu);
}
void del(int n,int m)
{
a[m]=a[n];
n--;
if(a[m]<a[m/2])
h_up(n,m);
else
h_down(n,m);
}
void rez1 (int n,int m)
{
a[++n]=m;
h_up(n,n);
}
void rez2(int n,int m)
{
int x,i;
for(i=1;i<=n;i++)
{
if(a[i]==m)
{
x=i;
break;
}
}
del(n,x);
}
int main()
{
freopen("heapuri.in","r",stdin);
freopen("heapuri.out","w",stdout);
int n,i,t,m,u=0,q=0;
scanf("%d",&n);
for(i=1;i<=n;i++)
{
scanf("%d",&t);
if(t==1)
{
scanf("%d",&m);
b[++q]=m;
rez1(u,m);
u++;
}
if(t==2)
{
scanf("%d",&m);
rez2(u,b[m]);
u--;
}
if(t==3)
printf("%d\n",a[1]);
}
return 0;
}