Pagini recente » Cod sursa (job #22040) | Cod sursa (job #138566) | Cod sursa (job #2080751) | Cod sursa (job #15319) | Cod sursa (job #2861497)
#include <fstream>
#define INF 1000000001
using namespace std;
ifstream f("heapuri.in");
ofstream g("heapuri.out");
int a[200011],m,arb[200011],coord[200011];
void insus(int k)
{
if(k==1)
return;
if(a[arb[k]]<a[arb[k/2]])
{
swap(coord[arb[k/2]],coord[arb[k]]);
swap(arb[k/2],arb[k]);
insus(k/2);
}
}
void injos(int k)
{
int x=2*k;
if(x>m)
return;
if(x+1<=m && a[arb[x+1]]<a[arb[x]])
x++;
if(a[arb[k]]>a[arb[x]])
{
swap(coord[arb[k]],coord[arb[x]]);
swap(arb[k],arb[x]);
injos(x);
}
}
int n,i,C,x;
int main()
{
f>>n;
for(i=1;i<=n;i++)
{
f>>C;
if(C==1)
{
m++;
f>>a[m];
arb[m]=m;
coord[m]=m;
insus(m);
}
else
if(C==2)
{
f>>x;
a[x]=INF;
injos(coord[x]);
}
else
g<<a[arb[1]]<<'\n';
}
return 0;
}