Pagini recente » Diferente pentru onis-2015/solutii-runda-1 intre reviziile 52 si 51 | Clasament preoni6a | Statistici Rusu Andrei (RusuAndrei) | Diferente pentru preoni-2005/runda-3/solutii intre reviziile 9 si 10 | Cod sursa (job #302569)
Cod sursa(job #302569)
#include<fstream>
#include<algorithm>
#include<vector>
using namespace std;
ifstream in("grader1.in");
ofstream out("heapuri.out");
int v[200010],n,x,y,i,k,k1,b[200010];
vector<int> a;
void corecteaza(int nod)
{
if(v[nod]<v[nod/2] && v[nod/2])
{
swap(v[nod],v[nod/2]);
swap(b[b[nod]],b[b[nod/2]]);
corecteaza(nod/2);
}
}
void updateaza(int nod)
{
if(2*nod<k)
{
if(v[2*nod]<v[2*nod+1] && v[2*nod])
{
swap(v[nod],v[2*nod]);
b[2*y]=b[y];
updateaza(2*nod);
}
else
if(v[2*nod+1])
{
swap(v[nod],v[2*nod+1]);
b[2*y+1]=b[y];
updateaza(2*nod+1);
}
}
else
if(2*nod==k && v[2*nod])
{
swap(v[nod],v[2*nod]);
b[2*y]=b[y];
}
}
int main()
{
in>>n;
for(i=1;i<=n;i++)
b[i]=i;
for(i=1;i<=n;i++)
{
in>>x;
if(x==3)
out<<v[1]<<"\n";
else
{
in>>y;
if(x==1)
{
v[++k]=y;
corecteaza(k);
}
else
{
v[b[y]]=0;
updateaza(b[y]);
b[y]=0;
}
}
}
return 0;
}