Pagini recente » Cod sursa (job #2038939) | Cod sursa (job #110834) | Cod sursa (job #2227684) | Cod sursa (job #1179941) | Cod sursa (job #1625531)
#include <fstream>
#define lg H[0]
#define k Poz[0].poz
using namespace std;
ifstream cin("heapuri.in");
ofstream cout("heapuri.out");
struct Ix{ int poz,val; };
Ix Poz[200003];
int n,i,j;
int H[200003];
int TA(int x){return x/2;}
int FS(int x){return x*2;}
int FD(int x){return x*2+1;}
void Promovare(int nod)
{
while(TA(nod)>=1 && Poz[H[TA(nod)]].val > Poz[H[nod]].val)
{
int aux1=TA(nod),aux2=nod;
swap(Poz[H[TA(nod)]].poz , Poz[H[nod]].poz);
swap(H[TA(nod)],H[nod]);
nod=TA(nod);
}
}
void Retrogradare(int nod)
{
int fi=0;
if(FS(nod) > lg)
return;
if(FD(nod) <= lg)
{
if(Poz[H[FS(nod)]].val < Poz[H[FD(nod)]].val)
fi=FS(nod);
else
fi=FD(nod);
}
else
fi=FS(nod);
if(Poz[H[nod]].val > Poz[H[fi]].val)
{
swap(Poz[H[nod]].poz , Poz[H[fi]].poz);
swap(H[nod] , H[fi]);
Retrogradare(fi);
}
}
void Erase_H(int nod)
{
H[Poz[nod].poz]=H[lg];
Poz[H[lg]].poz=Poz[nod].poz;
Poz[nod].val=0;
H[lg]=0;
--lg;
if(H[Poz[nod].poz]!=0)
{
if(Poz[nod].poz==1)
{
Retrogradare(Poz[nod].poz);
return;
}
if(Poz[H[TA(Poz[nod].poz)]].val > Poz[H[Poz[nod].poz]].val)
Promovare(Poz[nod].poz);
else
Retrogradare(Poz[nod].poz);
Poz[nod].poz=0;
}
}
void Afis()
{
for(int z=1;z<=lg;++z)
cout<<Poz[H[z]].val<<' ';
cout<<'\n';
}
int main()
{
cin>>n;
for(int z=1;z<=n;++z)
{
cin>>i;
if(i==1)
{
cin>>j;
Poz[++k].poz=++lg;
Poz[k].val=j;
H[lg]=k;
Promovare(lg);
//Afis();
}
if(i==2)
{
cin>>j;
if(Poz[j].val==328)
Poz[j].val=328;
Erase_H(j);
/*cout<<"\n *********** ";
Afis();
cout<<'\n';*/
}
if(i==3)
cout<<Poz[H[1]].val<<'\n';
}
return 0;
}