Pagini recente » Istoria paginii runda/rmi2016 | Istoria paginii runda/de_test/clasament | Agm 2018 | Istoria paginii runda/summerstuff/clasament | Cod sursa (job #1450167)
#include <fstream>
using namespace std;
ifstream f("heapuri.in");
ofstream g("heapuri.out");
int n,c,i,H[200010],V[200010],P[200010],h,t,x,poz,aux;
void Heap_down(int),Heap_up(int);
int main()
{
f>>n;
for(;n;n--)
{
f>>c;
if(c==1)
{
h++;
t++;
H[h]=t;
f>>V[t];
P[t]=h;
Heap_up(h);
}
else
if(c==2)
{
f>>x;
poz=P[x];
H[poz]=H[h--];
P[H[poz]]=poz;
Heap_up(poz);
Heap_down(poz);
}
else
g<<V[H[1]]<<'\n';
}
return 0;
}
void Heap_down(int tata)
{
int fiu=2*tata;
if(fiu>h)return;
if(fiu<h && V[H[fiu]]>V[H[fiu+1]])fiu++;
if(V[H[fiu]]<V[H[tata]])
{
aux=H[fiu];
H[fiu]=H[tata];
H[tata]=aux;
P[H[fiu]]=fiu;
P[H[tata]]=tata;
Heap_down(fiu);
}
}
void Heap_up(int fiu)
{
int tata=fiu/2;
if(!tata)return;
if(V[H[fiu]]<V[H[tata]])
{
aux=H[fiu];
H[fiu]=H[tata];
H[tata]=aux;
P[H[fiu]]=fiu;
P[H[tata]]=tata;
Heap_up(tata);
}
}