Pagini recente » Istoria paginii runda/cum_sa_fii_manelist/clasament | Cod sursa (job #1875012) | Cod sursa (job #1525022) | Flux si cuplaj | Cod sursa (job #714779)
Cod sursa(job #714779)
#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)
{
actual[val]=fiu1;
actual[v[fiu1]]=nod;
swap(v[nod],v[fiu1]);
downheap(fiu1);
}
else
if(coada[v[nod]]>coada[v[fiu2]] && fiu2<=contor)
{
actual[val]=fiu2;
actual[v[fiu2]]=nod;
swap(v[nod],v[fiu2]);
downheap(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;
}