Pagini recente » Cod sursa (job #1858012) | Cod sursa (job #1158909) | Cod sursa (job #1698274) | Cod sursa (job #2575465) | Cod sursa (job #899753)
Cod sursa(job #899753)
#include <cstdio>
#include <fstream>
using namespace std;
int p[200005], v[200005];
int main()
{
int n;
FILE *in=fopen("heapuri.in", "r");
ofstream out ("heapuri.out");
fscanf (in, "%d", &n);
int i, nr=0, x, t, tasu, fiu, q=0, j, aux;
for (i=1; i<=n; i++)
{
fscanf (in, "%d", &t);
if (t!=3)
fscanf (in, " %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)
out<<p[1]<<"\n";
}
return 0;
}