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