Pagini recente » Cod sursa (job #2032859) | Cod sursa (job #2890888) | Cod sursa (job #2675327) | Cod sursa (job #3176428) | Cod sursa (job #2553843)
#include <iostream>
#include <fstream>
using namespace std;
ifstream in ("heapuri.in");
ofstream out ("heapuri.out");
const int N=200001;
int h[N],poz[N],v[N],nh,nrc,n;
void schimb (int p, int q)
{
swap (h[p],h[q]);
poz[h[p]]=p;
poz[h[q]]=q;
}
void coboara (int p)
{
int fs=p*2,fd=p*2+1,bun=p;
if (fs<=nh && v[h[fs]]<v[h[bun]])
bun=fs;
if (fd<=nh && v[h[fd]]<v[h[bun]])
bun=fd;
if (bun!=p)
{
schimb (p,bun);
coboara (bun);
}
}
void urca (int p)
{
while (p>1 && v[h[p]]<v[h[p/2]])
{
schimb (p,p/2);
p/=2;
}
}
void sterge (int p)
{
schimb (p,nh--);
urca (p);
coboara(p);
}
void adauga (int x)
{
h[++nh]=x;
poz[x]=nh;
urca (nh);
}
int main()
{
in>>n;
int x,y;
for (int i=1;i<=n;i++)
{
in>>x;
if (x==1)
{
in>>y;
v[++nrc]=y;
adauga (nrc);
}
else if (x==2)
{
in>>y;
sterge (poz[y]);
}
else out<<v[h[1]]<<'\n';
/*
for (int i=1;i<=nh;i++)
cout<<vh[i]<<' ';
cout<<'\n';
*/
}
return 0;
}