Pagini recente » Cod sursa (job #3249248) | Cod sursa (job #704385) | Cod sursa (job #3125081) | Clasament autumn2007-runda3 | Cod sursa (job #2263355)
#include<bits/stdc++.h>
using namespace std;
ifstream in("heapuri.in");
ofstream out("heapuri.out");
int h[200002],p[200002],pp[200002],n;
void urca(int x)
{
while(x>1&&h[x]<h[x/2])
{
swap(h[x],h[x/2]);
swap(p[pp[x]],p[pp[x/2]]);
swap(pp[x],pp[x/2]);
x/=2;
}
}
void coboara(int x)
{
int nr=x;
if(2*x<=n&&h[nr]>h[2*x])
nr=2*x;
if(2*x+1<=n&&h[nr]>h[2*x+1])
nr=2*x+1;
if(nr!=x)
{
swap(h[x],h[nr]);
swap(p[pp[x]],p[pp[nr]]);
swap(pp[x],pp[nr]);
return coboara(nr);
}
}
int main()
{
int q,nn=0,i,c,nr;
in>>q;
while(q--)
{
in>>c;
if(c==1)
{
in>>nr;
h[++n]=nr;
p[++nn]=n;
pp[n]=nn;
urca(n);
}
else if(c==2)
{
in>>nr;
if(p[nr]==n)
{
n--;
continue;
}
h[p[nr]]=h[n];
pp[p[nr]]=pp[n];
p[pp[p[nr]]]=p[nr];
nr=p[nr];
coboara(nr);
urca(nr);
}
else
out<<h[1]<<"\n";
}
return 0;
}