Pagini recente » Cod sursa (job #2049381) | Cod sursa (job #2692497) | Cod sursa (job #576962) | Cod sursa (job #969674) | Cod sursa (job #819724)
Cod sursa(job #819724)
#include<cstdio>
#include<algorithm>
#include<utility>
#define val first
#define poz second
#define oo (1<<31)-1
using namespace std;
int t,H[200010],op,x,n,k;
pair<int,int> A[200010];
void heapup(int F)
{
int P=F/2;
if(!P) return;
if(A[H[P]].val>A[H[F]].val)
{
swap(H[F],H[P]);
swap(A[H[P]].poz,A[H[F]].poz);
heapup(P);
}
}
void heapdown(int P)
{
int F=2*P;
if(F>n) return;
if(A[H[F+1]].val<A[H[F]].val&&F+1<=n) F++;
if(A[H[P]].val>A[H[F]].val)
{
swap(H[F],H[P]);
swap(A[H[F]].poz,A[H[P]].poz);
heapdown(F);
}
}
int main()
{
freopen("heapuri.in","r",stdin);
freopen("heapuri.out","w",stdout);
scanf("%d",&t);
for(;t;t--)
{
scanf("%d",&op);
if(op==1)
{
scanf("%d",&x);
n++;
A[++k]=make_pair(x,n);
H[n]=k;
heapup(n);
}
if(op==2)
{
scanf("%d",&x);
A[x].val=oo;
heapdown(A[x].poz);
n--;
}
if(op==3)
{
printf("%d\n",A[H[1]].val);
}
}
return 0;
}