Pagini recente » Cod sursa (job #708238) | Cod sursa (job #2974468) | Cod sursa (job #2636092) | Cod sursa (job #2083702) | Cod sursa (job #1335786)
#include<fstream>
using namespace std;
#define NMAX 200005
ifstream fin("heapuri.in");
ofstream fout("heapuri.out");
int n,k,t,x,dh,a[NMAX],H[NMAX],P[NMAX];
void adaugare(int nr)
{
int tata,nod,aux;
H[++dh]=nr, P[H[dh]]=dh;
nod=dh, tata=nod>>1;
while (tata)
{
if (a[H[tata]]<=a[H[nod]])
break;
aux=H[nod], H[nod]=H[tata], H[tata]=aux;
P[H[nod]]=nod, P[H[tata]]=tata;
nod=tata, tata=nod>>1;
}
}
void eliminare(int nr)
{
int nod,fiu,aux;
H[nr]=H[dh--], P[H[nr]]=nr;
nod=nr, fiu=nod<<1;
while (fiu<=dh)
{
if (fiu<dh && a[H[fiu]]>a[H[fiu+1]])
++fiu;
if (a[H[nod]]<=a[H[fiu]])
break;
aux=H[nod], H[nod]=H[fiu], H[fiu]=aux;
P[H[nod]]=nod, P[H[fiu]]=fiu;
nod=fiu, fiu=nod<<1;
}
}
int main()
{
int i;
fin>>n;
for (i=1;i<=n;++i)
{
fin>>t;
if (t==1)
{
fin>>x;
a[++k]=x;
adaugare(k);
}
else
{
if (t==2)
{
fin>>x;
eliminare(P[x]);
}
else
fout<<a[H[1]]<<"\n";
}
}
return 0;
}