Pagini recente » Cod sursa (job #1781319) | Cod sursa (job #355405) | Cod sursa (job #1518542) | Cod sursa (job #941046) | Cod sursa (job #1622390)
#include<cstdio>
#include<algorithm>
using namespace std;
int n,o,ind,i,x,q,w,cnt,poz[200001],i1,i2;
struct hip
{
int val;
int ord;
} h[200001];
void up(int i)
{
if(i!= 1 && h[i].val<h[i/2].val)
{
i1=h[i].ord;
i2=h[i/2].ord;
swap(h[i1],h[i2]);
swap(poz[i],poz[i/2]);
up(i/2);
}
}
void down(int i)
{
int fiu=0;
if(2*i<=ind)
{
fiu=2*i;
if(fiu+1 <= ind && h[fiu+1].val < h[fiu].val)fiu=2*i+1;
if(h[fiu].val > h[i].val)fiu=0;
}
if(fiu)
{
i1=h[fiu].ord;
i2=h[i].ord;
swap(h[i1],h[i2]);
swap(poz[i1],poz[i]);
down(fiu);
}
}
int main()
{
freopen("heapuri.in","r",stdin);
freopen("heapuri.out","w",stdout);
scanf("%d",&n);
for(i=0; i<n; i++)
{
scanf("%d",&o);
if(o == 1)
{
scanf("%d",&x);
ind++;
cnt++;
h[ind].val = x;
h[ind].ord = cnt;
poz[ind]=cnt;
up(ind);
}
if(o == 2)
{
scanf("%d",&x);
i1=h[x].ord;
i2=h[ind].ord;
swap(h[i1],h[i2]);
swap(poz[i1],poz[i2]);
up(poz[x]);
down(poz[x]);
ind --;
}
if(o == 3)printf("%d\n",h[1].val);
}
}