Pagini recente » Cod sursa (job #2675535) | Cod sursa (job #937368) | Cod sursa (job #305925) | Cod sursa (job #1691025) | Cod sursa (job #331493)
Cod sursa(job #331493)
#include<stdio.h>
#include<string.h>
#define nmax 200010
long n,h[nmax],v[nmax],poz[nmax];
void read()
{
scanf("%ld",&n);
}
void ath()
{
long k,aux;
if (h[0]==0)
{
h[1]=v[0];
poz[v[0]]=1;
h[0]++;
}
else {
h[++h[0]]=v[0];
poz[v[0]]=h[0];
k=h[0];
while (v[h[k/2]]>v[v[0]] && k/2!=0)
{
aux=h[k];
h[k]=h[k/2];
h[k/2]=aux;
aux=poz[v[0]];
poz[v[0]]=poz[k/2];
poz[k/2]=aux;
k=k/2;
}
}
}
void elim()
{
long p,k,f,aux,el;
p=k=poz[v[v[0]]];
h[k]=h[h[0]];
el=h[k];
poz[v[v[0]]]=-1;
poz[h[k]]=k;
h[0]--;
while (k>1 && v[h[k]]<v[h[k/2]])
{
aux=h[k];
h[k]=h[k/2];
h[k/2]=aux;
aux=poz[el];
poz[el]=poz[k/2];
poz[k/2]=aux;
k=k/2;
}
do
{
f=0;
if (2*k<=h[0])
{
f=v[h[2*k]];
p=2*k;
if (2*k+1<=h[0])
if (f>v[h[2*k+1]])
{
f=v[h[2*k+1]];
p=2*k+1;
}
}
if (f)
{
if (v[h[k]]>f)
{
aux=h[k];
h[k]=h[p];
h[p]=aux;
aux=poz[p];
poz[el]=poz[p];
poz[p]=aux;
k=p;
}
else f=0;
}
}
while(f);
}
void op(long cod)
{
switch (cod)
{
case 1:{ath();break;}
case 2:{elim();v[0]--;break;}
case 3:{printf("%ld\n",v[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;
}