Pagini recente » Cod sursa (job #2069035) | Cod sursa (job #2981931) | Cod sursa (job #919890) | Cod sursa (job #1480809) | Cod sursa (job #431844)
Cod sursa(job #431844)
#include<fstream>
using namespace std;
int n=0,h[200000],c[200000],nc=0,nn,p[200000],i,nr;
void upheap(int poz,int nr)
{int aux;
while(poz>1&&h[poz]<h[poz/2])
{
h[poz]=h[poz/2];
h[poz/2]=nr;
aux=p[h[poz]];
p[h[poz]]=p[h[poz/2]];
p[h[poz/2]]=aux;
poz=poz/2;
}
}
void downheap(int poz,int nr)
{int son,aux;
do
{son=0;
if(poz*2<n&&poz*2+1<=n)
if(h[poz*2]<h[poz*2+1])
{
h[poz]=h[poz*2];
h[poz*2]=n;
aux=p[h[poz]];
p[h[poz]]=p[h[poz*2]];
p[h[poz*2]]=aux;
}
else
{
h[poz]=h[poz*2+1];
h[poz*2+1]=n;
aux=p[h[poz]];
p[h[poz]]=p[h[poz*2+1]];
p[h[poz*2+1]]=aux;
}
if(poz*2<=n&&poz*2+1>n)
{
h[poz]=h[poz*2];
h[poz*2]=n;
aux=p[h[poz]];
p[h[poz]]=p[h[poz*2]];
p[h[poz*2]]=aux;
}
}
while(son);
}
int main()
{
ifstream f("heapuri.in");
ofstream g("heapuri.out");
f>>nn;
for(i=1;i<=nn;i++)
{f>>nr;
if(nr==1)
{f>>nr;
nc++;
n++;
h[n]=nr;
c[nc]=nr;
p[nr]=n;
upheap(n,nr);
}
else
if(nr==2)
{
f>>nr;
h[p[c[nr]]]=h[n];
n--;
if(h[p[c[nr]]/2]>h[p[c[nr]]])
upheap(p[c[nr]],h[p[c[nr]]]);
else
downheap(p[c[nr]],h[p[c[nr]]]);
}
else
if(nr==3)
g<<h[1]<<"\n";
}
return 0;
}