Pagini recente » Cod sursa (job #2508425) | Cod sursa (job #2128741) | Cod sursa (job #739120) | Cod sursa (job #3217711) | Cod sursa (job #630650)
Cod sursa(job #630650)
#include <cstdio>
using namespace std;
int h[200001],v[200001],poz[200001];
inline void swap(int a,int b)
{
int c;
c=h[a];
h[a]=h[b];
h[b]=c;
poz[h[a]]=a;
poz[h[b]]=b;
}
void arata()
{
printf("%d\n",v[h[1]]);
return;
}
void urca (int p)
{
while(p!=1 && v[h[p]]<v[h[p/2]])
{
swap(p,p/2);
p=p/2;
}
}
void coboara(int p)
{
int ps=p;
if(p*2<=h[0] && h[p*2]<h[ps])
ps=2*p;
if(p*2+1<=h[0] && h[p*2+1]<h[ps])
ps=2*p+1;
if(ps!=p)
{
swap(p,ps);
coboara(ps);
}
}
void baga()
{
scanf("%d",&v[++v[0]]);
h[++h[0]]=v[0];
poz[v[0]]=h[0];
urca(h[0]);
}
void scoate()
{
int x;
scanf("%d",&x);
h[poz[x]]=h[h[0]];
poz[h[poz[x]]]=x;
swap(poz[h[0]],h[0]--);
urca(poz[x]);
coboara(poz[x]);
}
int main()
{
int i,n,op;
freopen("heapuri.in","r",stdin);
freopen("heapuri.out","w",stdout);
scanf("%d",&n);
for(i=1;i<=n;++i)
{
scanf("%d",&op);
if(op==1)
baga();
if(op==2)
scoate();
if(op==3)
arata();
}
return 0;
}