Pagini recente » Cod sursa (job #2097487) | Cod sursa (job #5564) | Cod sursa (job #1058216) | Cod sursa (job #553648) | Cod sursa (job #806449)
Cod sursa(job #806449)
#include<cstdio>
#include<algorithm>
#include<deque>
#define nr first
#define in second
using namespace std;
deque<pair<int,int> > H;
int a[1000020];
void heapdown(int P,int L)
{
int F=P*2;
if(F>L) return;
if(H[F].nr>H[F+1].nr) F++;
if(H[F].nr<H[P].nr)
{
swap(a[H[F].in],a[H[P].in]);
swap(H[F],H[P]);
heapdown(F,L);
}
}
void heapup(int F)
{
int P=F/2;
if(P==0) return;
if(H[P].nr>H[F].nr)
{
swap(a[H[F].in],a[H[P].in]);
swap(H[P],H[F]);
heapup(P);
}
}
int main()
{
int n,i=0,op,x,j=0;
freopen("heapuri.in","r",stdin);
freopen("heapuri.out","w",stdout);
scanf("%d",&n);
H.push_back(make_pair(0,0));
for(;n;n--)
{
scanf("%d",&op);
if(op==1)
{
scanf("%d",&x);
i++;j++;
H.push_back(make_pair(x,j));
a[j]=j;
heapup(i);
}
else if(op==2)
{
scanf("%d",&x);
H[a[x]].nr=H[i].nr;
H[a[x]].in=H[i].in;
a[H[i].in]=a[x];
i--;
H.pop_back();
heapup(a[x]);
heapdown(a[x],i);
a[x]=0;
}
else if(op==3)
{
printf("%d\n",H[1].nr);
}
}
return 0;
}