Pagini recente » Cod sursa (job #2039797) | Cod sursa (job #707026) | Cod sursa (job #477082) | Cod sursa (job #329552) | Cod sursa (job #1898439)
#include <iostream>
#include <fstream>
using namespace std;
int n,lg=0,v[200001]={0},poz[200001]={0},p=0,au[200001]={0};
void add(int fa)
{
while (au[v[fa]]<au[v[fa/2]] && fa>1)
{
swap(v[fa],v[fa/2]);
poz[v[fa]]=fa;
poz[v[fa/2]]=fa/2;
fa/=2;
}
}
void ster(int a)
{
int fa=-1;
while( fa!=a)
{
fa=a;
if(au[v[a]]>au[v[2*fa]] && 2*fa<=lg)a=fa*2;
if(au[v[a]]>au[v[2*fa+1]] && 2*fa+1<=lg)a=2*fa+1;
swap(v[fa],v[a]);
poz[v[fa]]=fa;
poz[v[a]]=a;
}
}
int main()
{
ifstream f("heapuri.in");
ofstream g("heapuri.out");
f>>n;
int c,x;
for(int i=1;i<=n;i++)
{
f>>c;
if(c==1)
{
f>>x;
p++;
v[++lg]=p;
poz[p]=lg;
au[p]=x;
add(lg);
}
else if(c==2)
{
f>>x;
au[x]=-1;
add(poz[x]);
poz[v[1]]=0;
v[1]=v[lg];
poz[v[1]]=1;
lg--;
if(lg-1)ster(1);
}
else {
g<<au[v[1]]<<'\n';
}
}
}