Pagini recente » Cod sursa (job #483054) | Cod sursa (job #1070068) | Cod sursa (job #2002542) | Cod sursa (job #1777174) | Cod sursa (job #2569957)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("heapuri.in");
ofstream fout("heapuri.out");
int N,P,lung;
int H[200005],Poz[200005];
void adauga(int nR)
{
Poz[++P]=nR;
H[++lung]=nR;
int F=lung,T=lung/2;
while(H[F]<H[T] && F>=1)
{
swap(H[F],H[T]);
F=T;
T=F/2;
}
}
void sterge(int nR)
{
int cv=0;
for(int i=1;i<=N && !cv ;i++)
if(H[i]==nR)
cv=i;
swap(H[cv],H[lung]);
lung--;
int T=cv,F=2*cv;
while(F<=lung)
{
if(F<lung && H[F]>H[F+1])
F++;
if(H[T]>H[F])
{
swap(H[T],H[F]);
T=F;
F=2*T;
}
else
F=lung+1;
}
}
int main()
{
int cod,x;
fin>>N;
for(int i=1;i<=N;i++)
{
fin>>cod;
if(cod==3)
fout<<H[1]<<'\n';
else
{
fin>>x;
if(cod==2)
sterge(Poz[x]);
else
adauga(x);
}
}
return 0;
}