Cod sursa(job #1966534)

Utilizator otto1Palaga Vicentiu-Octavian otto1 Data 15 aprilie 2017 12:45:59
Problema Heapuri Scor 20
Compilator cpp Status done
Runda Arhiva educationala Marime 0.88 kb
#include<fstream>
using namespace std;
int n,x,y,v[200001],w[200001],aux,u[200001];
ifstream f("heapuri.in");
ofstream g("heapuri.out");
int main()
{f>>n;
for(int i=1;i<=n;i++)
{f>>x;
if(x==1)
{f>>y;
v[++v[0]]=y;
w[++w[0]]=v[0];
u[v[0]]=w[0];
aux=w[0];
while(aux>1&&v[w[aux]]<v[w[aux/2]])
{swap(u[w[aux]],u[w[aux/2]]);
swap(w[aux],w[aux/2]);
aux/=2;
}
}
else if(x==2)
{f>>y;
aux=u[y];
u[w[w[0]]]=aux;
w[aux]=w[w[0]];
w[w[0]--]=0;
while(aux>1&&v[w[aux]]<v[w[aux/2]])
{swap(u[w[aux]],u[w[aux/2]]);
swap(w[aux],w[aux/2]);
aux/=2;
}
while((2*aux<w[0]&&v[w[aux]]>min(v[w[2*aux]],v[w[2*aux+1]]))||(2*aux==w[0]&&w[aux]>v[w[2*aux]]))
if(2*aux+1>w[0]||v[w[2*aux]]<=v[w[2*aux+1]])
{swap(u[w[aux]],u[w[2*aux]]);
swap(w[aux],w[2*aux]);
aux*=2;
}
else
{swap(u[w[aux]],u[w[2*aux+1]]);
swap(w[aux],w[2*aux+1]);
aux=2*aux+1;
}
}
else
g<<v[w[1]]<<'\n';
}
return 0;
}