Pagini recente » Cod sursa (job #471510) | Cod sursa (job #2744240) | Cod sursa (job #343151) | Cod sursa (job #45408) | Cod sursa (job #2567218)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("heapuri.in");
ofstream fout("heapuri.out");
int N,lung;
int H[200005];
vector<int>Ad;
void adaugare(int nR)
{
H[++lung]=nR;
int F=lung;
int T=F/2;
while(H[F]<H[T] && T)
{
swap(H[F],H[T]);
F=T;
T=F/2;
}
Ad.push_back(nR);
}
void eliminare(int nR)
{
int poz=0;
for(int i=1;i<=lung && !poz;i++)
if(H[i]==nR)
poz=i;
swap(H[poz],H[lung]);
lung--;
int T=poz;
int F=2*T;
while(F<lung)
{
if(H[F]>H[F+1])
F++;
if(H[T]>H[F])
{
swap(H[T],H[F]);
T=F;
F=2*T;
}
}
if(F==lung && H[T]>H[F])
swap(H[T],H[F]);
}
void citire()
{
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==1)
adaugare(x);
else
{
eliminare(Ad[x-1]);
}
}
}
}
int main()
{
citire();
return 0;
}