Pagini recente » Cod sursa (job #294503) | Cod sursa (job #361412) | Cod sursa (job #2777186) | Cod sursa (job #2238521) | Cod sursa (job #1758670)
#include <fstream>
#define nmax 200005
using namespace std;
unsigned int h[nmax],rh[nmax],d[nmax];
unsigned int n,nou;
void inser(unsigned int x)
{
unsigned int y;
n++;nou++;
y=h[n]=nou;
rh[nou]=n;
d[nou]=x;
while ( (y!=1) && ( d[h[y]] < d[h[y/2]]) )
{
swap( rh[h[y]], rh[h[y/2]]);
swap( h[y], h[y/2]);
y/=2;
}
}
void sterg(unsigned int x)
{
unsigned int y;
y=rh[x];rh[x]=0;h[y]=0;
while ( (y<=n) && (h[2*y] || h[2*y+1]) )
{
if (h[2*y]&&h[2*y+1])
{
if (h[2*y]<h[2*y+1])
{
rh[ h[2*y] ]=y;
swap(h[2*y],h[y]);
y=2*y;
}
else
{
rh[ h[2*y+1] ]=y;
swap(h[2*y+1],h[y]);
y=2*y+1;
}
}
else
{
if (h[2*y])
{
rh[ h[2*y] ]=y;
swap(h[2*y],h[y]);
y=2*y;
}
else
if (h[2*y+1])
{
rh[ h[2*y+1] ]=y;
swap(h[2*y+1],h[y]);
y=2*y+1;
}
}
}
n--;
}
int main()
{
ifstream f("heapuri.in");
ofstream g("heapuri.out");
unsigned int m,op,x;
for (f>>m;m;m--)
{
f>>op;
if (op==3) g<<d[h[1]]<<'\n';
else
{
f>>x;
if (op==1)
inser(x);
else
sterg(x);
}
}
f.close();
g.close();
return 0;
}