Pagini recente » Cod sursa (job #2880257) | Cod sursa (job #1126705) | Cod sursa (job #227649) | Cod sursa (job #427390) | Cod sursa (job #267872)
Cod sursa(job #267872)
#include<fstream.h>
#define inf 2000000000
#define Nmax 201000
ifstream f("heapuri.in");
ofstream g("heapuri.out");
long n,h[Nmax],k,m,nr,cr,poz[Nmax];
struct pozitie
{
long heap;
long cron;
}p[Nmax];
void urca(long k)
{
long z,aj;
while(h[k]<h[k/2] && k>1)
{ z=h[k];
h[k]=h[k/2];
h[k/2]=z;
aj=p[h[k]].heap;
p[h[k]].heap=p[h[k/2]].heap;
p[h[k/2]].heap=aj;
k=k/2;
}
}
int minim(long x)
{
long min=0;
for(long i=0;i<2;i++)
if(h[x+i]<h[min] && h[x+i]<h[x/2] && x+i<=n)
{
min=x+i;
}
return min;
}
void coboara(long k)
{
long min,z,gasit=1,aj;
min=minim(k*2);
while(gasit)
{
gasit=0;
min=minim(k*2);
if(min!=0)
{
z=h[k];
h[k]=h[min];
h[min]=z;
aj=p[h[k]].heap;
p[h[k]].heap=p[h[min]].heap;
p[h[min]].heap=aj;
gasit=1;
k=min;
}
}
}
void citire()
{
long z,i,x,nr;
f>>m;
for(i=0;i<m;i++)
{
f>>x;
switch(x)
{
case 1:{ f>>nr;
cr++;
n++;
h[n]=nr;
p[nr].heap=n;
p[nr].cron=cr;
poz[cr]=nr;
urca(n);
}
break;
case 2:{ f>>nr;
h[p[poz[nr]].heap]=h[n];
p[h[n]].heap=p[poz[nr]].heap;
n--;
coboara(p[poz[nr]].heap);
}
break;
case 3:
g<<h[1]<<'\n';
break;
}
}
}
int main()
{
h[0]=inf;
citire();
return 0;
}