Pagini recente » Cod sursa (job #3138658) | Cod sursa (job #912760) | Cod sursa (job #708016) | Cod sursa (job #25142) | Cod sursa (job #1611387)
#include<fstream>
using namespace std;
int nrop, op, x, a[200002], h[200002], p[200002], n, nrh, s, p1, kronos;
ifstream in("heapuri.in");
ofstream out("heapuri.out");
int main()
{
in>>nrop;
for(;nrop--;)
{
in>>op;
if(op==1)
{
in>>x;
a[++n]=x;
h[++nrh]=n;
p[n]=nrh;
s=nrh;
p1=s/2;
while(p1!=0 && a[h[s]]<a[h[p1]])
{
swap(h[s], h[p1]);
p[h[s]]=s;
p[h[p1]]=p1;
s=p1;
p1/=2;
}
continue;
}
if(op==2)
{
in>>kronos;
s=p[kronos];
p1=s/2;
a[kronos]=-1;
while(p1!=0 && a[h[s]]<a[h[p1]])
{
swap(h[s], h[p1]);
p[h[s]]=s;
p[h[p1]]=p1;
s=p1;
p1/=2;
}
h[1]=h[nrh];
p[h[1]]=1;
nrh--;
p1=1;
s=2;
while(s<=nrh)
{
if(s+1<=nrh && a[h[s+1]]<a[h[s]])
s++;
if(a[h[s]]<a[h[p1]])
{
swap(h[s], h[p1]);
p[h[s]]=s;
p[h[p1]]=p1;
p1=s;
s*=2;
}else
{
break;
}
}
continue;
}
out<<a[h[1]]<<"\n";
}
return 0;
}