Pagini recente » Cod sursa (job #2397327) | Cod sursa (job #2345659) | Cod sursa (job #1671984) | Cod sursa (job #2504055) | Cod sursa (job #648594)
Cod sursa(job #648594)
#include <fstream>
using namespace std;
#define dim 200001
#define inf 0x3f3f3f3f
int v[dim],poz,val,coada[dim],contor=1;
void update(int nod)
{
if(nod==1)
return;
if(v[nod/2]>v[nod])
{
int aux=v[nod/2];
v[nod/2]=v[nod];
v[nod]=aux;
update(nod/2);
}
}
void update1(int nod)
{
if(v[nod]>v[nod*2] && nod*2<=contor)
{
int aux=v[nod];
v[nod]=v[nod*2];
v[nod*2]=aux;
update1(nod*2);
}
if(v[nod]>v[nod*2+1] && nod*2+1<=contor)
{
int aux=v[nod];
v[nod]=v[nod*2+1];
v[nod*2+1]=aux;
update1(nod*2+1);
}
}
void sterge(int nod)
{
if(poz==v[nod])
{
if(nod==1)
{
v[1]=inf;
update(contor);
}
v[nod]=inf;
update1(nod);
poz=0;
return;
}
if(v[nod*2]<=poz && nod*2<=contor)
sterge(nod*2);
if(v[nod*2+1]<=poz && nod*2+1<=contor)
sterge(nod*2+1);
}
int main()
{
ifstream fin("heapuri.in");
ofstream fout("heapuri.out");
int n, i,x;
fin>>n;
fin>>x >>v[1];
coada[1]=v[1];
for(i=2;i<=n;++i)
{
int tip=0;
fin>>tip;
if(tip==1)
{
++contor;
fin>>v[contor];
coada[contor]=v[contor];
update(contor);
}
else
if(tip==2)
{
fin>>val;
poz=coada[val];
sterge(1);
}
else
fout<<v[1]<<'\n';
}
return 0;
}