Pagini recente » Cod sursa (job #1953693) | Cod sursa (job #1828283) | Cod sursa (job #3201928) | Cod sursa (job #1184624) | Cod sursa (job #1322277)
#include<fstream>
using namespace std;
ifstream f("heapuri.in");
ofstream g("heapuri.out");
struct pct
{
int v,p;
}h[200005];
int poz[200005],nr=0,c,n,x;
void upheap(int k)
{
if(k==1||h[k>>1].v<h[k].v)
return;
poz[h[k].p]=k>>1;
poz[h[k>>1].p]=k;
pct aux=h[k];
h[k]=h[k>>1];
h[k>>1]=aux;
upheap(k>>1);
}
void downheap(int k)
{
if((k<<1)>nr||(h[(k<<1)].v>=h[k].v&&h[(k<<1)+1].v>=h[k].v))
return;
pct aux;
if(h[(k<<1)].v<h[(k<<1)+1].v)
{
poz[h[(k<<1)].p]=k;
poz[h[k].p]=(k<<1);
aux=h[(k<<1)];
h[(k<<1)]=h[k];
h[k]=aux;
downheap((k<<1));
}
else
{
poz[h[(k<<1)+1].p]=k;
poz[h[k].p]=(k<<1)+1;
aux=h[(k<<1)+1];
h[(k<<1)+1]=h[k];
h[k]=aux;
downheap((k<<1)+1);
}
}
int main()
{
f>>n;
for(int i=1;i<=n;i++)
{
f>>c;
if(c==1)
{
nr++;
f>>h[nr].v;h[nr].p=nr;poz[nr]=nr;
upheap(nr);
}
if(c==2)
{
f>>x;
h[poz[x]]=h[nr];
nr--;
upheap(poz[x]);
downheap(poz[x]);
}
if(c==3)
g<<h[1].v<<"\n";
}
f.close();g.close();
return 0;
}