Pagini recente » Cod sursa (job #280705) | Cod sursa (job #2812059) | Cod sursa (job #1630953) | Cod sursa (job #1633579) | Cod sursa (job #751463)
Cod sursa(job #751463)
#include <fstream>
using namespace std;
ifstream in("heapuri.in");
ofstream out("heapuri.out");
const int N=200005;
int h[N],v[N],poz[N];
int nh,nr;
void swap(int p,int q)
{
int aux;
aux=h[p];
h[p]=h[q];
h[q]=aux;
poz[h[p]]=p;
poz[h[q]]=q;
}
void up(int p)
{
while(p>1 && v[h[p]]<v[h[p/2]])
{
swap(p,p/2);
p=p/2;
}
}
void add(int x)
{
v[++nr]=x;
h[++nh]=nr;
poz[nr]=nh;
up(nh);
}
void down(int p)
{
int S=p*2,D=p*2+1,op=p;
if(S<=nh && v[h[S]]<v[h[op]])
op=S;
if(D<=nh && v[h[D]]<v[h[op]])
op=D;
if(op!=p)
{
swap(p,op);
down(op);
}
}
void del(int p)
{
swap(p,nh--);
up(p);
down(p);
}
int main()
{
int n,i,q,x;
in>>n;
for(i=1;i<=n;i++)
{
in>>q;
if(q==1)
{
in>>x;
add(x);
continue;
}
if(q==2)
{
in>>x;
del(poz[x]);
continue;
}
out<<v[h[1]]<<"\n";
}
return 0;
}