Pagini recente » Cod sursa (job #918032) | Cod sursa (job #1207770) | Cod sursa (job #2190058) | Cod sursa (job #2679269) | Cod sursa (job #252011)
Cod sursa(job #252011)
#include <stdio.h>
using namespace std;
int val[200010];
int loc[200010];
int poz[200010],N,a,b;
int numar,num;
void sch(int &a,int &b)
{
int aux=a;
a=b;
b=aux;
}
void ins()
{
int i=numar;
val[numar]=b;
loc[numar]=num;
poz[num++]=numar;
numar++;
while (i!=1 && val[i>>1]>val[i])
{
sch(val[i],val[i>>1]);
sch(poz[loc[i]],poz[loc[i>>1]]);
sch(loc[i],loc[i>>1]);
i>>=1;
}
}
void sterge()
{
val[poz[b]]=val[numar-1];
numar--;
int i=poz[b],aux;
val[numar]=0;
while (1)
{
aux=i<<1;
if (val[aux]>val[aux+1] && aux+1<numar)
aux++;
if (val[i]>val[aux] && aux<numar)
{
sch(val[i],val[aux]);
sch(poz[loc[i]],poz[loc[aux]]);
sch(loc[i],loc[aux]);
}
else
break;
i=aux;
}
}
void citire()
{
freopen ("heapuri.in","r",stdin);
freopen ("heapuri.out","w",stdout);
scanf ("%d",&N);
numar=1;
num=1;
while (N)
{
scanf ("%d",&a);
if (a==3)
printf("%d\n",val[1]);
else
{
scanf ("%d",&b);
if (a==1)
ins();
else
sterge();
}
N--;
}
}
int main ()
{
citire();
return 0;
}