Pagini recente » Cod sursa (job #2206223) | Cod sursa (job #959707) | Cod sursa (job #567476) | Cod sursa (job #3217956) | Cod sursa (job #2153926)
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("heapuri.in");
ofstream g("heapuri.out");
const int N=200001;
int h[N],nh,v[N],poz[N];
void swapp( int p, int q)
{
swap( h[p] , h[q] );
poz[ h[p] ]=p;
poz[ h[q] ]=q;
}
void urca (int p)
{
while ( p>1 && v[ h[p] ] < v[ h[p/2] ] )
{
swapp( p , p/2 );
p/=2;
}
}
void coboara (int p)
{
int fs=2*p,fd=2*p+1,bun=p;
if (fs<=nh && v[ h[fs] ] < v[ h[bun] ])
bun=fs;
if (fd<=nh && v[ h[fd] ] < v[ h[bun] ])
bun = fd;
if (bun != p)
{
swapp ( p , bun );
coboara (bun);
}
}
void adauga (int val)
{
h[++nh]=val;
poz[val]=nh;
urca(nh);
}
void sterge (int p)
{
swapp ( p , nh-- );
urca(p);
coboara (p);
}
int main()
{
int n,i,x,o,nr=0;
f>>n;
for (i=1; i<=n; i++)
{
f>>o;
if (o==1)
{
f>>v[++nr];
adauga(nr);
}
if (o==2)
{
f>>x;
sterge( poz[x] );
}
if (o==3)
{
g<<v[h[1]]<<"\n";
}
}
return 0;
}