Pagini recente » Cod sursa (job #1422999) | Cod sursa (job #1887236) | Cod sursa (job #2886813) | Cod sursa (job #2135822) | Cod sursa (job #808591)
Cod sursa(job #808591)
#include<cstdio>
#include<vector>
#include<algorithm>
#define nr first
#define in second
using namespace std;
int a[200005];
pair<int,int> H[200005];
int n,i,op,x,j,k;
void heapdown(int P,int L)
{
int F=2*P;
if(F>L) return;
if(H[F+1].nr<H[F].nr) F++;
if(H[F].nr<H[P].nr)
{
swap(a[H[P].in],a[H[F].in]);
swap(H[F],H[P]);
heapdown(F,L);
}
}
void heapup(int F)
{
int P=F/2;
if(!P) return;
if(H[F].nr<H[P].nr)
{
swap(a[H[P].in],a[H[F].in]);
swap(H[F],H[P]);
heapup(P);
}
}
int main()
{
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)
{
scanf("%d",&x);
H[++j]=make_pair(x,j);
a[++k]=k;
heapup(j);
}
else if(op==2)
{
scanf("%d",&x);
H[a[x]].nr=H[j].nr;
H[a[x]].in=H[j].in;
a[H[j].in]=a[x];
j--;
heapup(a[x]);
heapdown(a[x],j);
a[x]=0;
}
else if(op==3)
{
printf("%d\n",H[1].nr);
}
//for(int ii=1;ii<=j;ii++) printf("%d ",H[ii].nr);
//printf("\n");
}
return 0;
}