Pagini recente » Cod sursa (job #3224899) | Cod sursa (job #2403197) | Cod sursa (job #3285548) | Cod sursa (job #2927947) | Cod sursa (job #1480663)
# include <cstdio>
#include <vector>
using namespace std;
int op,i,n,nr,b[200010], a[200010], aux, index, j;
void fixUp(int a[], 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[], int k, int nr)
{
int j;
while (2*k<=nr)
{
j = 2*k ;
if (j+1<=nr && a[j]<a[j])
{
j++;
}
if (a[k]<a[j]) break; else
{
aux=a[k];
a[k]=a[j];
a[j]=aux;
}
}
}
int main()
{
freopen("heapuri.in","r",stdin);
freopen("heapuri.out","w",stdout);
scanf("%d\n",&n);
nr=0;
for (i=1; i<=n; i++)
{
scanf("%d ",&op);
if (op==1)
{
scanf("%d\n", &a[++nr]);
b[nr]=a[nr];
fixUp(b, nr);
}
if (op==2)
{
scanf("%d\n", &index);
for (j=1; j<=nr; j++)
if (b[j]==a[index])
break;
aux = b[j]; b[j]=b[nr]; b[nr]=aux;
nr--;
fixDown(b, j, nr);
}
if (op==3)
{
printf("%d\n",b[1]);
}
}
}