Pagini recente » Cod sursa (job #1299186) | Cod sursa (job #696928) | Cod sursa (job #138500) | Cod sursa (job #2046026) | Cod sursa (job #1853041)
#include<fstream>
using namespace std;
ifstream fin("heapuri.in");
ofstream fout("heapuri.out");
struct per
{
int val,poz;
};
per heap[200002];
int nh, n,nv,i,tip,x;
char viz[200002];
void urcare(per heap[],int p)
{
per aux;
while(p>=2&&heap[p/2].val>heap[p].val)
{
aux=heap[p/2];
heap[p/2]=heap[p];
heap[p]=aux;
p=p/2;
}
}
void coborare(per heap[],int nh, int p)
{
per aux;
int r;
while(2*p<=nh)
{
r=2*p;
if(r+1<=nh&&heap[r+1].val<heap[r].val)
{
r++;
}
if(heap[p].val>heap[r].val)
{
aux=heap[p];
heap[p]=heap[r];
heap[p]=aux;
p=r;
}
else
{
break;
}
}
}
int main()
{
nh=0;
nv=0;
fin>>n;
for(i=1;i<=n;i++)
{
fin>>tip;
if(tip==1)
{
fin>>x;
nv++;
viz[nv]=0;
nh++;
heap[nh].val=x;
heap[nh].poz=nv;
urcare(heap,nh);
}
if(tip==2)
{
fin>>x;
viz[x]=1;
}
if(tip==3)
{
while(viz[heap[1].poz]==1)
{
per aux=heap[1];
heap[1]=heap[nh];
heap[nh]=aux;
nh--;
coborare(heap,nh,1);
}
fout<<heap[1].val<<"\n";
}
}
fin.close();
fout.close();
return 0;
}