Pagini recente » Cod sursa (job #2454377) | Cod sursa (job #3286127) | Cod sursa (job #901365) | Cod sursa (job #691159) | Cod sursa (job #2186219)
#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[2*p],h[p]);fv[h[p].poz]=p;fv[h[2*p].poz]=2*p;}
}
int m,V,poz,x,i;
int main()
{
f>>m;
n=0;
for(i=1;i<=m;i++)
{
f>>x;
if(x==1)
{
f>>V;
n++;
h[n].val=V;
h[n].poz=n;
fv[h[n].poz]=n;
up(n);
}
else if(x==2)
{
f>>poz;
h[fv[poz]].val=INT_MAX;
down(fv[poz]);
}
else g<<h[1].val<<'\n';
}
return 0;
}