Pagini recente » Cod sursa (job #2407410) | teammatesoo | Cod sursa (job #1375515) | Cod sursa (job #2897012) | Cod sursa (job #2870956)
#include <fstream>
using namespace std;
ifstream cin("heapuri.in");
ofstream cout("heapuri.out");
int v[200005],h[200005],nh=0,poz[200005];
void myswap(int p,int q)
{
swap(h[p],h[q]);
poz[h[p]]=p;
poz[h[q]]=q;
}
void up(int p)
{
while(p>1 && v[h[p]]<v[h[p/2]])
{
myswap(p,p/2);
p/=2;
}
}
void down(int p)
{
int newp=p,left_son=p*2,right_son=2*p+1;
if(v[h[p]]>v[h[left_son]] && left_son<=nh)
newp=left_son;
if(v[h[p]]>v[h[right_son]] && right_son<=nh)
newp=right_son;
if(newp!=p)
{
myswap(p,newp);
down(newp);
}
}
void add(int p)
{
h[++nh]=p;
poz[p]=nh;
up(nh);
}
void del(int p)
{
if(p==nh)
nh--;
else if(p<nh)
{
myswap(nh--,p);
up(p);
down(p);
}
}
int main()
{
int q,n=0;
cin>>q;
while(q--)
{
int tip;
cin>>tip;
if(tip==1)
{
cin>>v[++n];
add(n);
}
if(tip==2)
{
int x;
cin>>x;
del(poz[x]);
}
if(tip==3)
cout<<v[h[1]]<<"\n";
}
return 0;
}