Pagini recente » Cod sursa (job #2182643) | Cod sursa (job #1547857) | Cod sursa (job #1522872) | Cod sursa (job #1503885) | Cod sursa (job #331503)
Cod sursa(job #331503)
#include<fstream.h>
#include<string.h>
#define nmax 200010
long n,h[nmax],v[nmax],poz[nmax];
ifstream f("heapuri.in");
ofstream g("heapuri.out");
void read()
{
f>>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=poz[h[k]];
poz[h[k]]=poz[h[k/2]];
poz[h[k/2]]=aux;
aux=h[k];
h[k]=h[k/2];
h[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=poz[h[k]];
poz[h[k]]=poz[h[k/2]];
poz[h[k/2]]=aux;
aux=h[k];
h[k]=h[k/2];
h[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=poz[h[p]];
poz[h[p]]=poz[h[k]];
poz[h[k]]=aux;
aux=h[k];
h[k]=h[p];
h[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:{g<<v[h[1]]<<"\n";break;}
}
}
void rez()
{
long i;
long cod;
for (i=1;i<=n;i++)
{
f>>cod;
if (cod!=3)
f>>v[++v[0]];
op(cod);
}
}
int main()
{
read();
rez();
return 0;
}