Pagini recente » Cod sursa (job #1785529) | Cod sursa (job #256145) | Cod sursa (job #424841) | Cod sursa (job #1592988) | Cod sursa (job #1514146)
#include<stdio.h>
#include<algorithm>
using namespace std;
FILE *fin,*fout;
int n,t,nr,lph,val[200002],h[200002],pos[200002];
void setup(int nod)
{
while(nod!=1)
{
if(val[h[nod]]<val[h[nod/2]])
{
swap(h[nod],h[nod/2]);
swap(pos[h[nod]],pos[h[nod/2]]);
}
else break;
}
}
void setdown(int nod)
{
if(nod*2<=lph)
{
if((nod*2+1)<=lph)
{
if(val[h[nod*2]]>val[h[nod*2+1]])
{
if(val[h[nod]]>val[h[nod*2+1]])
{
swap(h[nod],h[nod*2+1]);
swap(pos[h[nod]],pos[h[nod*2+1]]);
setdown(nod*2+1);
}
}
else
{
if(val[h[nod]]>val[h[nod*2]])
{
swap(h[nod],h[nod*2]);
swap(pos[h[nod]],pos[h[nod*2]]);
setdown(nod*2);
}
}
}
else
{
if(val[h[nod]]>val[h[nod*2]])
{
swap(h[nod],h[nod*2]);
swap(pos[h[nod]],pos[h[nod*2]]);
setdown(nod*2);
}
}
}
}
int main()
{
fin=fopen("heapuri.in","r");
fout=fopen("heapuri.out","w");
fscanf(fin,"%d",&n);
for(int i=1;i<=n;i++)
{
fscanf(fin,"%d",&t);
if(t==1)
{
nr++;
fscanf(fin,"%d",&val[nr]);
lph++;
h[lph]=nr;
pos[nr]=lph;
setup(lph);
}
else if(t==2)
{
fscanf(fin,"%d",&t);
h[pos[t]]=h[lph];
pos[h[lph]]=pos[t];
lph--;
setdown(pos[t]);
}
else
{
fprintf(fout,"%d\n",val[h[1]]);
}
}
}