Pagini recente » Cod sursa (job #1724582) | Cod sursa (job #619006) | Cod sursa (job #1866920) | Cod sursa (job #1433528) | Cod sursa (job #1043451)
# include <cstdio>
# define MAXN 500001
using namespace std;
int a[MAXN],H[MAXN],poz[MAXN],i,n,op,nr,k,k1;
void swap(int x,int y)
{
int aux;
aux=H[x];
H[x]=H[y];
H[y]=aux;
poz[H[x]]=x;
poz[H[y]]=y;
}
void HeapUp(int k)
{
int t;
if(k<=1) return;
t=k/2;
if(a[H[k]]<a[H[t]])
{
swap(k,t);
HeapUp(t);
}
}
void HeapDown(int p, int k)
{
int i,Dr,St;
if(2*p<=k)
{
St=a[H[2*p]];
if(2*p+1<=k) Dr=a[H[2*p+1]];
else Dr=St+1;
if(St<Dr) i=2*p;
else i=2*p+1;
if(a[H[p]]>a[H[i]])
{
swap(p,i);
HeapDown(i,k);
}
}
}
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 || op==2) scanf("%d", &nr);
if(op==1)
{
a[++k]=nr;
H[++k1]=k;
poz[k]=k1;
HeapUp(k1);
}
if(op==2)
{
int x=poz[nr];
swap(poz[nr],k1);
k1--;
HeapDown(x,k1);
}
if(op==3) printf("%d\n", a[H[1]]);
}
}