Pagini recente » Istoria paginii utilizator/dora1810 | Monitorul de evaluare | Profil MrPetcu | Diferente pentru utilizator/robybrasov intre reviziile 78 si 51 | Cod sursa (job #302570)
Cod sursa(job #302570)
#include<fstream>
#include<algorithm>
#include<vector>
using namespace std;
ifstream in("heapuri.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;
}