Pagini recente » Cod sursa (job #11510) | Cod sursa (job #556234) | Cod sursa (job #1715592) | Cod sursa (job #1804980) | Cod sursa (job #294272)
Cod sursa(job #294272)
#include<fstream>
using namespace std;
int i,n,m,k,pozitie,x,op,p[200010];
struct sir{ int pos;long long inf;} ;
sir v[200010];
void swap (int i, int j)
{ sir aux; int aux2;
aux2=p[v[i].pos]; p[v[i].pos]=p[v[j].pos]; p[v[j].pos]=aux2;
aux=v[i]; v[i]=v[j]; v[j]=aux;
}
void actualizare ( int poz)
{ int poz1;
if( (poz<<1+1) <= n )
{ if(v[poz].inf > v[poz<<1].inf || v[poz].inf > v[poz<<1+1].inf)
{ if(v[poz<<1].inf < v[poz<<1+1].inf) poz1=poz<<1;
else poz1=poz<<1+1;
swap(poz,poz1);
actualizare(poz1);
}
}
else if( (poz<<1) <= n )
if( v[poz].inf > v[poz<<1].inf )
swap( poz , poz<<1 );
}
void actualizare1 ( int poz)
{
while(poz > 1 && v[poz].inf < v[poz>>1].inf)
{swap(poz,poz>>1);
poz>>=1;
}
}
int main()
{
ifstream f("heapuri.in");
ofstream g("heapuri.out");
f>>m;
for(i=1;i<=m;i++)
{ f>>op;
if(op==1) { f>>x;
v[++n].inf=x;
v[n].pos=++k;
p[k]=n;
actualizare1(n);
}
else if(op==2) {f>>x;
pozitie=p[x];
swap(pozitie,n); --n;
actualizare(pozitie);
}
else
g<<v[1].inf<<'\n';
}
f.close();
g.close();
return 0;
}