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