Pagini recente » Cod sursa (job #2906368) | Cod sursa (job #3158615) | Cod sursa (job #3241493) | Cod sursa (job #3148526) | Cod sursa (job #1339575)
#include <cstdio>
using namespace std;
int a[200010], k,op,x,i,j,n,m,b[200010],lg;
void fixUp(int a[200010], int k)
{
int aux;
while (k>1 && a[k/2]>a[k])
{
aux=a[k/2];
a[k/2]=a[k];
a[k]=aux;
k=k/2;
}
}
void fixDown(int a[200010], int k, int m)
{
int j, aux;
while (2*k<=m)
{
j=2*k;
if (j+1<=m && a[j+1]<a[j]) j++;
if (a[k]<=a[j]) break;
aux=a[k]; a[k]=a[j]; a[j]=aux;
k=j;
}
}
int main()
{
freopen("heapuri.in","r",stdin);
freopen("heapuri.out","w",stdout);
scanf("%d\n",&n); m=0;
for (i=1; i<=n; i++)
{
scanf("%d ",&op);
if (op==1)
{
scanf("%d\n",&x);
m++;
a[m]=x;
fixUp(a,m);
b[++lg]=x;
}
if (op==2)
{
scanf("%d\n",&x);
for (k=1; k<=m; k++)
if (a[k]==b[x]) break;
a[k]=a[m]; m--;
fixDown(a,k,m);
}
if (op==3)
{
printf("%d\n",a[1]);
}
}
return 0;
}