Pagini recente » Cod sursa (job #2466876) | Cod sursa (job #583118) | Cod sursa (job #1317736) | Cod sursa (job #2940209) | Cod sursa (job #1042248)
#include<cstdio>
#define N_MAX 200010
using namespace std;
int N,i,k,x,n,Nr,poz[N_MAX],H[N_MAX],A[N_MAX];
inline void swap(int a,int b)
{
int aux;
aux=H[a];
H[a]=H[b];
H[b]=aux;
poz[H[a]]=a;
poz[H[b]]=b;
}
inline void Heap_Down(int k)
{
int St=k*2,Dr=k*2+1,p;
if (St<=Nr)
{
p=St;
if (Dr<=Nr && A[H[Dr]]<A[H[St]]) p=Dr;
if (A[H[p]]<A[H[k]])
{
swap(k,p);
Heap_Down(p);
}
}
}
inline void Heap_Up(int k)
{
int t=k/2;
if (t>0 && A[H[k]]<A[H[t]])
{
swap(k,t);
Heap_Up(t);
}
}
int main()
{
freopen("heapuri.in","r",stdin);
freopen("heapuri.out","w",stdout);
scanf("%d",&N);
for (i=1;i<=N;i++)
{
scanf("%d",&k);
if (k==1)
{
scanf("%d",&x);
A[++n]=x;
H[++Nr]=n;
poz[n]=Nr;
Heap_Up(Nr);
}
if (k==2)
{
scanf("%d",&x);
int c=poz[x];
swap(poz[x],Nr);
Nr--;
Heap_Down(c);
}
if (k==3) printf("%d\n",A[H[1]]);
}
fclose(stdin);
fclose(stdout);
return 0;
}