Pagini recente » Cod sursa (job #2045868) | Cod sursa (job #1215748) | Cod sursa (job #415570) | Cod sursa (job #1416936) | Cod sursa (job #2269628)
#include <fstream>
using namespace std;
ifstream f("heapuri.in");
ofstream g("heapuri.out");
struct heap
{
int val,poz;
}h[200100];
int n,fv[200100];
void up(int p)
{
if(p>=1 && h[p].val<h[p/2].val)
{
swap(h[p],h[p/2]);
fv[h[p].poz]=p;
fv[h[p/2].poz]=p/2;
up(p/2);
}
}
void down(int p)
{
if(2*p+1<=n && (h[2*p].val<h[p].val || h[2*p+1].val<h[p].val))
{
if(h[2*p].val < h[2*p+1].val){swap(h[p],h[2*p]);fv[h[p].poz]=p;fv[h[2*p].poz]=2*p;down(2*p);}
else {swap(h[p],h[2*p+1]);fv[h[p].poz]=p;fv[h[2*p+1].poz]=2*p+1;down(2*p+1);}
}
else if(2*p<=n && h[2*p].val<h[p].val)
{
swap(h[p],h[2*p]);fv[h[p].poz]=p;fv[h[2*p].poz]=2*p;down(2*p);
}
}
int m,i,cerinta,x,pozitie;
int main()
{
f>>m;
for(i=1;i<=m;i++)
{
f>>cerinta;
if(cerinta==1)
{
f>>x;
n++;
h[n].val=x;
h[n].poz=n;
fv[h[n].poz]=n;
up(n);
}
else if(cerinta==2)
{
f>>pozitie;
h[fv[pozitie]].val=INT_MAX;
down(fv[pozitie]);
}
else g<<h[1].val<<'\n';
}
return 0;
}