Pagini recente » Cod sursa (job #2013961) | Cod sursa (job #2693079) | Cod sursa (job #1795930) | Cod sursa (job #3263262) | Cod sursa (job #899764)
Cod sursa(job #899764)
#include <cstdio>
#include <fstream>
using namespace std;
int p[200005], v[200005];
int main()
{
int n;
ifstream in ("heapuri.in");
ofstream out ("heapuri.out");
in>>n;
int i, nr=0, x, t, tasu, fiu, q=0, j, aux;
for (i=1; i<=n; i++)
{
in>>t;
if (t!=3)
in>>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;
}