Pagini recente » Cod sursa (job #2585578) | Cod sursa (job #2809752) | Cod sursa (job #706811) | Cod sursa (job #1509960) | Cod sursa (job #899738)
Cod sursa(job #899738)
#include <cstdio>
using namespace std;
int p[200005], v[200005];
int main()
{
int n;
freopen("heapuri.in", "r", stdin);
freopen("heapuri.out", "w", stdout);
scanf ("%d", &n);
int i=1, nr=0, x, t, tasu, fiu, q=0, j, aux;
for (i; i<=n; i++)
{
scanf ("%d", &t);
if (t!=3)
scanf (" %d", &x);
if (t==1)
{
nr++;
q++;
p[nr]=x;
v[q]=nr;
tasu=nr;
fiu=tasu/2;
while (fiu>=1 && p[tasu]<p[fiu])
{
aux=p[tasu];
p[tasu]=p[fiu];
p[fiu]=aux;
aux=v[tasu];
v[tasu]=v[fiu];
v[fiu]=aux;
tasu=fiu;
fiu/=2;
}
}
if (t==2)
{
j=1;
while (x!=v[j])
j++;
aux=p[j];
p[j]=p[nr];
p[nr]=aux;
aux=v[j];
v[j]=v[nr];
v[nr]=aux;
nr--;
tasu=j;
fiu=tasu*2;
if (p[fiu+1]>p[fiu] && fiu+1<=nr)
fiu++;
while (fiu<=nr && p[tasu]>p[fiu])
{
aux=p[tasu];
p[tasu]=p[fiu];
p[fiu]=aux;
aux=v[tasu];
v[tasu]=v[fiu];
v[fiu]=aux;
tasu=fiu;
fiu*=2;
if (p[fiu+1]>p[fiu] && fiu+1<=nr)
fiu++;
if (fiu<=nr) break;
}
}
if (t==3)
printf ("%d\n", p[1]);
}
return 0;
}