Pagini recente » Cod sursa (job #2538709) | Cod sursa (job #2903788) | Cod sursa (job #2096193) | Flux si cuplaj | Cod sursa (job #714778)
Cod sursa(job #714778)
#include <fstream>
using namespace std;
#define dim 200001
#define inf 0x3f3f3f3f
int v[dim],poz,val,coada[dim],contor=1, uz[dim], actual[dim];
void update(int nod)
{
int tata=nod/2;
if(coada[v[tata]]>coada[v[nod]])
{
swap(v[tata],v[nod]);
actual[contor]=tata;
actual[tata]=nod;
update(nod/2);
}
}
void downheap(int nod)
{
int fiu1=nod*2;
int fiu2=nod*2+1;
if(coada[v[nod]]>coada[v[fiu1]] && fiu1<=contor)
{
swap(v[nod],v[fiu1]);
swap(actual[v[nod]],actual[v[fiu1]]);
update(fiu1);
}
if(coada[v[nod]]>coada[v[fiu2]] && fiu2<=contor)
{
swap(v[nod],v[fiu2]);
swap(actual[v[nod]],actual[v[fiu2]]);
update(fiu2);
}
}
int main()
{
ifstream fin("heapuri.in");
ofstream fout("heapuri.out");
int n, i,x;
fin>>n;
fin>>x >>v[1];
coada[1]=v[1];
v[1]=1;
actual[1]=1;
for(i=2;i<=n;++i)
{
int tip=0;
fin>>tip;
if(tip==1)
{
++contor;
fin>>coada[contor];
v[contor]=contor;
actual[contor]=contor;
update(contor);
}
else
if(tip==2)
{
fin>>val;
coada[val]=inf;
poz=actual[val];
downheap(poz);
}
else
fout<<coada[v[1]]<<'\n';
}
return 0;
}