Pagini recente » Cod sursa (job #2189616) | Cod sursa (job #2386561) | Cod sursa (job #2929147) | Cod sursa (job #9098) | Cod sursa (job #638676)
Cod sursa(job #638676)
#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] && v[h[p*2]]<v[h[ps]])
ps=2*p;
if(p*2+1<=h[0] && v[h[p*2+1]]<v[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]];
swap(poz[x],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;
}