Pagini recente » Cod sursa (job #790045) | Cod sursa (job #718029) | Cod sursa (job #2186381) | Cod sursa (job #1796135) | Cod sursa (job #358158)
Cod sursa(job #358158)
#include<stdio.h>
#define D 200010
using namespace std;
int n,a[D],heap[D],v[D],num,k,a1,a2,i;
void sw(int x,int y)
{ int aux;
aux=heap[x];
heap[x]=heap[y];
heap[y]=aux;
v[heap[x]]=x;v[heap[y]]=y;
}
void baga(int x,int y)
{ int i;
heap[++k]=y;
v[num]=k;
i=k;
while((a[heap[i/2]]>a[heap[i]])&&(i/2))
{
sw(i,i/2);
i=i/2;
}
}
void del(int x)
{int i,j,ok=1;
sw(x, k);
i=x;
k--;
j=i*2;
while(ok)
{
j=i*2;
if(j>k) return;
if((k>=j+1) && (a[heap[j+1]]<a[heap[j]])) j++;
if(a[heap[j]]>=a[heap[i]]) return;
sw(j,i);
i=j;
}
}
int main()
{
freopen("heapuri.in", "r",stdin);
freopen("heapuri.out", "w",stdout);
scanf("%d",&n);
num=0;
for(i=1;i<=n;i++)
{
scanf("%d",&a1);
if(a1==1)
{
scanf("%d",&a2);
a[++num]=a2;
baga(a2,num);
}
else
if(a1==2)
{
scanf("%d",&a2);
del(v[a2]);
}
else
printf("%d\n",a[heap[1]]);
}
return 0;
}