Pagini recente » Cod sursa (job #643616) | Cod sursa (job #3164174) | Cod sursa (job #597887) | Cod sursa (job #1148135) | Cod sursa (job #1239270)
# include <cstdio>
# include <algorithm>
using namespace std;
struct da{int val,p;};
da a[200001];
int m=0,n,i,COMANDA,pozitie,x;
int poz[200001];
void HeapUp (int m)
{
if (m<=1) return;
if (a[m].val<a[m/2].val)
{ swap (poz[a[m].p],poz[a[m/2].p]);
swap(a[m],a[m/2]);
HeapUp(m/2);
}
}
void HeapDown (int m, int r)
{
int St,Dr;
if(2*r<=n)
{
St=a[2*r].val;
if (2*r+1<=n) Dr=a[2*r+1].val;
else Dr=St-1;
if (St<Dr || (St>Dr && Dr!=0))
{
if (a[r].val>a[2*r].val)
{ swap (poz[a[r].p],poz[a[r/2].p]);
swap(a[2*r].val,a[r].val);
HeapDown(m,2*r+1);
}
}
else
{
if (a[r].val<a[2*r+1].val)
{
swap(a[2*r+1],a[r]);
HeapDown(n,2*r+1);
}
}
}
}
int main ()
{freopen("heapuri.in","r",stdin);
freopen("heapuri.out","w",stdout);
scanf("%d",&n);
for (i=1; i<=n; i++) {
scanf("%d",&COMANDA);
if (COMANDA==1) {
pozitie++;
scanf("%d",&x);
a[++m].val=x;
a[m].p=pozitie;
poz[m]=pozitie;
HeapUp(m);
}
if (COMANDA==2) {
scanf("%d",&x);
swap(a[poz[x]],a[m]) ;
m--;
HeapDown(m,poz[x]);
}
if (COMANDA==3) {
printf("%d\n",a[1].val);
}
}
return 0;
}