Pagini recente » Cod sursa (job #933963) | Cod sursa (job #837863) | Cod sursa (job #1593233) | Cod sursa (job #2417499) | Cod sursa (job #630046)
Cod sursa(job #630046)
#include <cstdio>
using namespace std;
int h[200001],v[200001],poz[200001];
inline void swap(int &a,int &b)
{
int c=a;
a=b;
b=c;
}
void arata()
{
printf("%d\n",v[h[1]]);
return;
}
void urca (int p)
{
while(p!=1 && v[h[p]]<v[h[p/2]])
{
swap(h[p],h[p/2]);
swap(poz[h[p]],poz[h[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;
if(ps!=p)
{
swap(h[p],h[ps]);
swap(poz[h[p]],poz[h[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);
swap(h[poz[x]],h[h[0]]);
swap(poz[h[poz[x]]],poz[h[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;
}