Cod sursa(job #1318691)

Utilizator dica69Alexandru Lincan dica69 Data 16 ianuarie 2015 11:34:48
Problema Heapuri Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.02 kb
#include <cstdio>

using namespace std;
FILE *f1 = fopen("heapuri.in","r");
FILE *f2 = fopen("heapuri.out","w");
int h[200001],i,n,o,x,p[200001],l,m;


void CombHeap(int i,int n)
{int v=h[i],tata=i,fiu=2*i;
while (fiu<=n)
{if (fiu<n && p[h[fiu+1]]<p[h[fiu]]) fiu++;
if (p[v]>p[h[fiu]])
{h[tata]=h[fiu];
tata=fiu;
fiu=fiu*2;
}
else fiu=n+1;
}
h[tata]=v;
}

void push(int x)
{int aux;
while (x/2 && p[h[x]]<p[h[x/2]])
{aux=h[x];
h[x]=h[x/2];
h[x/2]=aux;
x=x/2;
}
}

void ins(int x)
{int i;
l++;m++;h[m]=l;p[l]=x;
push(l);
}

void afis()
{fprintf(f2,"%d\n",p[h[1]]);
}


void del(int x)
{int i;
p[x]=-1;
for (i=m/2;i;i--) CombHeap(i,m);
h[1]=h[m--];
CombHeap(1,m);
}


int main()
{fscanf(f1,"%d",&n);
for (i=1;i<=n;i++)
{fscanf(f1,"%d",&o);
if (o==1) {fscanf(f1,"%d",&x);ins(x);}
else if (o==2) {fscanf(f1,"%d",&x);del(x);}
else afis();
}
fclose(f1);
fclose(f2);

    return 0;
}

//Challenges are what make life interesting and overcoming them is what makes life meaningful.