Pagini recente » Cod sursa (job #2717899) | Cod sursa (job #2958265) | Cod sursa (job #904464) | Cod sursa (job #105001) | Cod sursa (job #2071059)
#include<fstream>
using namespace std;
int n,i,op,x,k,nr,a[200010],H[200010],p[200010];
ifstream f("heapuri.in");
ofstream g("heapuri.out");
void swap(int i,int j)
{
int aux=H[i];
H[i]=H[j];H[j]=aux;
p[H[i]]=i;
p[H[j]]=j;
}
void up(int k)
{
int tata=k/2,fiu=k;
while(tata && a[H[tata]]>a[H[fiu]])
{
swap(fiu,tata);
fiu=tata;
tata=tata/2;
}
}
void down(int x)
{
int y=0;
while(x!=y)
{
y=x;
if(y*2<=k && a[H[x]]>a[H[y*2]]) x=y*2;
if(y*2+1<=k && a[H[x]]>a[H[y*2+1]]) x=y*2+1;
swap(x,y);
}
}
int main()
{
f>>n;
for(i=1;i<=n;i++)
{
f>>op;
if(op==1 || op==2)
f>>x;
if(op==1)
{
k++;nr++;
a[nr]=x;
H[k]=nr;
p[nr]=k;
up(k);
}
else if(op==2)
{
a[x]=-1;
up(p[x]);
p[H[1]]=0;
H[1]=H[k];
k--;
p[H[1]]=1;
if(k>1) down(1);
}
else g<<a[H[1]]<<"\n";
}
f.close();
g.close();
return 0;
}