Pagini recente » Cod sursa (job #1897496) | Cod sursa (job #669450) | Cod sursa (job #2266486) | Cod sursa (job #2132915) | Cod sursa (job #2587810)
#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]);
swap(v[heap[poz]],v[heap[poz/2]]);
ascensiune(poz/2);
}
}
void coborare(int poz)
{
if(poz*2==L)
{
if(val[heap[poz]]>val[heap[poz*2]])
{
swap(heap[poz],heap[poz*2]);
swap(v[heap[poz]],v[heap[poz*2]]);
}
}
else if(poz*2<L)
{
if(val[heap[poz]]>val[heap[poz*2]] || val[heap[poz]]>val[heap[poz*2+1]])
{
if(val[heap[poz*2+1]]<val[heap[poz*2]])
{
swap(heap[poz],heap[poz*2]);
swap(v[heap[poz]],v[heap[poz*2]]);
coborare(2*poz);
}
else
{
swap(heap[poz],heap[poz*2+1]);
swap(v[heap[poz]],v[heap[poz*2+1]]);
coborare(2*poz+1);
}
}
}
}
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;
}