Pagini recente » Cod sursa (job #1199875) | Cod sursa (job #2137377) | Cod sursa (job #2046556) | Cod sursa (job #1541142) | Cod sursa (job #2836000)
#include <fstream>
using namespace std;
ifstream cin("heapuri.in");
ofstream cout("heapuri.out");
int h[200005],poz[200005],v[200005],nh=0,n=0;
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;
int l_son=2*p,r_son=2*p+1;
if(l_son<=nh && v[h[l_son]]<v[h[newp]])
newp=l_son;
if(r_son<=nh && v[h[r_son]]<v[h[newp]])
newp=r_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,tip;
cin>>q;
for(int i=1;i<=q;i++)
{
cin>>tip;
if(tip==1)
{
cin>>v[++n];
add(n);
}
if(tip==2)
{
int p;
cin>>p;
del(poz[p]);
}
if(tip==3)
cout<<v[h[1]]<<"\n";
}
return 0;
}