Pagini recente » Cod sursa (job #3222191) | Cod sursa (job #516452) | Cod sursa (job #2622959) | Cod sursa (job #442596) | Cod sursa (job #327986)
Cod sursa(job #327986)
#include<stdio.h>
int n,nh;
int v[200002];
int h[200002];
int poz[200002];
void heap_up(int nod)
{
if((nod>>1)==0)
return;
if(v[h[nod>>1]]>v[h[nod]])
{
int aux;
poz[h[nod]]=nod>>1;
poz[h[nod>>1]]=nod;
aux=h[nod>>1];
h[nod>>1]=h[nod];
h[nod]=aux;
heap_up(nod>>1);
}
}
void heap_down(int nod)
{
int fiu=nod;
if((nod<<1) <= nh && v[h[nod<<1]] < v[h[fiu]])
fiu=(nod<<1);
if((nod<<1)+1 <= nh && v[h[(nod<<1)+1]] < v[h[fiu]])
fiu=(nod<<1)+1;
if(fiu!=nod)
{
int aux;
poz[h[nod]]=fiu;
poz[h[fiu]]=nod;
aux=h[fiu];
h[fiu]=h[nod];
h[nod]=aux;
heap_down(fiu);
}
}
void read()
{
freopen("heapuri.in","r",stdin);
freopen("heapuri.out","w",stdout);
int m,a,b;
scanf("%d",&m);
while(m--)
{
scanf("%d",&a);
if(a==3)
{
printf("%d\n",v[h[1]]);
continue;
}
if(a==2)
{
scanf("%d",&b);
h[poz[b]]=h[nh];
poz[h[nh]]=poz[b];
nh--;
heap_up(poz[b]);
heap_down(poz[b]);
}
if(a==1)
{
scanf("%d",&v[++n]);
h[++nh]=n;
poz[n]=nh;
heap_up(nh);
}
}
}
int main()
{
read();
return 0;
}