Pagini recente » Cod sursa (job #2262373) | Cod sursa (job #2463872) | Cod sursa (job #2800177) | Cod sursa (job #2572114) | Cod sursa (job #379787)
Cod sursa(job #379787)
# include <fstream.h>
ifstream f ("heapuri.in");
ofstream g ("heapuri.out");
int a[200005],i,k,n,z,nrr,y,sf,v[200005],aux,sff,min,poz[200005],nr
;
void sss (int k)
{
if (k/2)
if (a[v[k/2]]>a[v[k]])
{
aux=v[k];
v[k]=v[k/2];
v[k/2]=aux;
poz[v[k/2]]=k/2;
poz[v[k]]=k;
sss (k/2);
}
}
void jjj (int k)
{
if (2*k+1<=sf)
{
if (a[v[2*k]]<a[v[2*k+1]])
min=2*k;
else
min=2*k+1;
if (a[v[min]]<a[v[k]])
{
aux=v[min];
v[min]=v[k];
v[k]=aux;
poz[v[min]]=min;
poz[v[k]]=k;
jjj (min);
}
}
else
if (2*k<=sf)
if (a[v[2*k]]<a[v[k]])
{
aux=v[k];
v[k]=v[2*k];
v[2*k]=aux;
poz[v[k]]=k;
poz[v[2*k]]=2*k;
}
}
void adauga (int x)
{
nr++;
a[nr]=x;
sf++;
v[sf]=nr;
poz[nr]=sf;
sss (sf);
}
void mm (int k)
{ int ok=0;
if (k/2)
if (a[v[k/2]]>a[v[k]])
{
sss (k);
ok=1;
}
if (ok==0)
jjj (k);
}
void sterg (int k)
{
v[k]=v[sf];
poz[v[k]]=k;
sf--;
mm (k);
}
int main ()
{
f>>n;
for (i=1;i<=n;i++)
{
f>>z;
if (z==1)
{
f>>y;
adauga (y);
}
if (z==3)
g<<a[v[1]]<<"\n";
if (z==2)
{
f>>y;
sterg (poz[y]);
}
}
return 0;
}