Pagini recente » Cod sursa (job #489256) | Cod sursa (job #2253565) | Cod sursa (job #1990322) | Cod sursa (job #2612468) | Cod sursa (job #2381747)
#include <fstream>
using namespace std;
ifstream fin("heapuri.in");
ofstream fout("heapuri.out");
int h[200001],v[200001],p[200001];
int k,n,nr,x,t;
void downheap(int poz)
{
while(2*poz<=k)
{
int st=poz*2;
if(st+1<=k&&v[h[st]]>v[h[st+1]])
st++;
if(v[h[poz]]>v[h[st]])
{
swap(h[poz],h[st]);
p[h[poz]]=poz;
p[h[st]]=st;
poz=st;
}
else
break;
}
}
void upheap(int poz)
{
while(poz/2>0)
{
int st=poz/2;
if(v[h[poz]]<v[h[st]])
{
p[h[st]]=poz;
p[h[poz]]=st;
swap(h[poz],h[st]);
poz=st;
}
else
break;
}
}
int main()
{
fin>>n;
for(int i=1;i<=n;i++)
{
fin>>t;
if(t==1)
{
k++;nr++;
fin>>v[nr];
h[k]=nr;
p[nr]=k;
upheap(k);
}
else if(t==2)
{
fin>>x;
int pos=p[x];
swap(p[x],p[h[k]]);
swap(h[k],h[pos]);
k--;
upheap(pos);
downheap(pos);
}
else
fout<<v[h[1]]<<'\n';
}
return 0;
}