Pagini recente » Cod sursa (job #2140860) | Cod sursa (job #38343) | Cod sursa (job #1043335) | Cod sursa (job #1205625) | Cod sursa (job #572370)
Cod sursa(job #572370)
#include<fstream>
#define nmax 200010
using namespace std;
int h[nmax],v[nmax],a[nmax];
int n;
int fiust(int nod){ return 2*nod; }
int fiudr(int nod){ return 2*nod+1; }
int tata (int nod){ return nod/2; }
void jos(int k)
{
int fiu;
do
{
fiu =0;
if (fiust(k)<=n)
fiu=fiust(k);
if (fiust(k)>fiudr(k)&&fiudr(k)<=n)
fiu=fiudr(k);
if (h[fiu]>=h[k])
fiu=0;
else if (fiu)
{
swap(h[fiu],h[k]);
swap(v[a[fiu]],v[a[k]]);
swap(a[fiu],a[k]);
k=fiu;
}
}while (fiu);
}
void sus(int k)
{
int i;
while (k>1&&h[k]<h[tata(k)])
{
swap(h[k],h[tata(k)]);
swap(v[a[k]],v[a[tata(k)]]);
swap(a[k],a[tata(k)]);
k=tata(k);
}
}
int main()
{
int i,op,m,x;
ifstream in("heapuri.in");
ofstream out("heapuri.out");
in>>m;
for (;m;m--)
{
in>>op;
if (op<3)
{
in>>x;
if (op==1)
{
n++;
v[n]=n;
a[n]=n;
h[n]=x;
sus(n);
}
else if (op==2)
{
h[v[x]]=h[n];
v[a[n]]=v[x];
a[v[x]]=a[n];
n--;
if (h[v[x]]<h[tata(v[x])])
sus(v[x]);
else
jos(v[x]);
}
}
else
out<<h[1]<<'\n';
}
}