Pagini recente » Cod sursa (job #1153126) | Cod sursa (job #2826746) | Cod sursa (job #122192) | Cod sursa (job #2031646) | Cod sursa (job #914466)
Cod sursa(job #914466)
#include <fstream>
using namespace std;
ifstream fin("heapuri.in");
ofstream fout("heapuri.out");
int H[200005],poz[200005],m,n,A[200005],lg;
void insertheap(int x, int lg)
{
int aux, tata, fiu;
fiu=lg; tata=lg/2;
while(A[H[tata]]>A[x]&&tata>0)
{
H[fiu]=H[tata];poz[H[fiu]]=fiu;
fiu=tata; tata=fiu/2;
}
H[fiu]=x; poz[H[fiu]]=fiu;
}
void comb(int x, int lg)
{
int y=H[x];
int tata=x, fiu=2*tata;
while(fiu<=lg)
{
if(fiu<lg && A[H[fiu+1]]<H[fiu]) fiu++;
if(A[H[fiu]]<A[y])
{
H[tata]=H[fiu]; poz[H[tata]]=tata;
tata=fiu; fiu=fiu*2;
}
else fiu=lg+1;
}
H[tata]=y; poz[H[tata]]=tata;
}
void erase(int x,int lg)
{
H[x]=H[lg+1];
poz[H[x]]=x;
comb(x,lg);
}
int main()
{
int i,val,nr;
fin>>n;
for(i=1;i<=n;i++)
{
fin>>val;
if(val==1)
{
fin>>nr;
A[++A[0]]=nr;
insertheap(A[0],++lg);}
if(val==2)
{
fin>>nr;
erase(poz[nr],--lg);
}
if(val==3) {fout<<A[H[1]]<<"\n";}
}
}