Pagini recente » Cod sursa (job #1690151) | Cod sursa (job #2705958) | Cod sursa (job #1552135) | Cod sursa (job #1888018) | Cod sursa (job #330746)
Cod sursa(job #330746)
#include<stdio.h>
#define nmax 200010
long n,h[200010],v[200010];
void read()
{
scanf("%ld",&n);
}
void ath()
{
long k,aux;
if (h[0]==0)
{
h[1]=v[v[0]];
h[0]++;
}
else {
h[++h[0]]=v[v[0]];
k=h[0];
while (h[k/2]>v[v[0]] && k/2!=0)
{
aux=h[k];
h[k]=h[k/2];
h[k/2]=aux;
k=k/2;
}
}
}
long search (long k)
{
if (h[k]==v[v[v[0]]])
return k;
if (h[k]<v[v[v[0]]])
{
return search(2*k);
return search(2*k+1);
}
}
void elim()
{
long p,k;
p=search(1);
k=p;
while (2*k<=h[0])
{
if (2*k+1<=h[0])
if (h[2*k]<h[2*k+1])
{
h[k]=h[2*k];
k=2*k;
}
else {
h[k]=h[2*k+1];
k=2*k+1;
}
else {
h[k]=h[2*k];
k=2*k;
}
}
h[0]--;
}
void op(long cod)
{
switch (cod)
{
case 1:{ath();break;}
case 2:{elim();v[0]--;break;}
case 3:{printf("%ld\n",h[1]);break;}
}
}
void rez()
{
long i;
long cod;
for (i=1;i<=n;i++)
{
scanf("%ld",&cod);
if (cod!=3)
scanf("%ld",&v[++v[0]]);
op(cod);
}
}
int main()
{
freopen("heapuri.in","r",stdin);
freopen("heapuri.out","w",stdout);
read();
rez();
return 0;
}