Pagini recente » Cod sursa (job #1999350) | Cod sursa (job #2004854) | Cod sursa (job #2833896) | Cod sursa (job #384483) | Cod sursa (job #2587824)
#include <fstream>
#define NMAX 200005
using namespace std;
ifstream cin("heapuri.in");
ofstream cout("heapuri.out");
int v[NMAX],heap[NMAX],L,k,val[NMAX];
void ascensiune(int poz)
{
if(val[heap[poz]]<val[heap[poz/2]])
{
swap(heap[poz],heap[poz/2]);
v[heap[poz]]=poz;
v[heap[poz/2]]=poz/2;
ascensiune(poz/2);
}
}
void coborare(int poz)
{
int cv=0;
if(2*poz<=L)
cv=2*poz;
if(2*poz+1<=L && val[heap[2*poz+1]]<val[heap[2*poz]])
cv=2*poz+1;
if(val[heap[cv]]>=val[heap[poz]])
cv=0;
if(cv)
{
swap(heap[cv],heap[poz]);
v[heap[poz]]=poz;
v[heap[cv]]=cv;
coborare(cv);
}
}
int main()
{
heap[0]=0;
val[heap[0]]=-2e9;
int n,op,tip,nr;
cin>>n;
for(op=1;op<=n;op++)
{
cin>>tip;
if(tip==3)
cout<<val[heap[1]]<<'\n';
else
{
cin>>nr;
if(tip==1)
{
L++,k++;
heap[L]=k;
val[k]=nr;
v[k]=L;
ascensiune(L);
}
else
{
int pozitie=v[nr];
heap[v[nr]]=heap[L];
v[heap[L]]=v[nr];
v[nr]=-1;
L--;
if(val[heap[pozitie]]<val[heap[pozitie/2]])
ascensiune(pozitie);
else
coborare(pozitie);
}
}
}
return 0;
}