Pagini recente » Cod sursa (job #2478644) | Cod sursa (job #796478) | Cod sursa (job #601802) | Cod sursa (job #3189201) | Cod sursa (job #1735900)
using namespace std;
#include<fstream>
ifstream f("heapuri.in");
ofstream g("heapuri.out");
int n;
int H[200001],nr; //heap
int ord[200001],l; // ord[i] - pozitia in heap a elementului intrat al i-lea in multime (de ordin i sa spunem)
int pos[200001]; // pos[i] - pozitia din ord[] la care gasim elementul i din heap
int main()
{
int i,j,o,x,aux;
f>>n;
while(n--)
{
f>>o;
if(o==1)
{
f>>x;
H[++nr]=x;
ord[++l]=l;
pos[nr]=l;
i=nr;
while(i>1)
{
if(H[i]<H[i/2])
{
aux=H[i];
H[i]=H[i/2];
H[i/2]=aux;
aux=ord[pos[i]];
ord[pos[i]]=ord[pos[i/2]];
ord[pos[i/2]]=aux;
aux=pos[i];
pos[i]=pos[i/2];
pos[i/2]=aux;
i=i/2;
}
else i=1;
}
}
else if(o==2)
{
f>>x;
H[ord[x]]=H[nr];
pos[ord[x]]=pos[nr];
ord[pos[nr]]=ord[x];
nr--;
i=ord[x];
while(i*2<=nr)
{
j=2*i;
if(j+1<=nr && H[j+1]<H[j]) j++;
if(H[i]>H[j])
{
aux=H[i];
H[i]=H[j];
H[j]=aux;
aux=ord[pos[i]];
ord[pos[i]]=ord[pos[j]];
ord[pos[j]]=aux;
i=j;
}
else i=nr/2+2;
}
}
else g<<H[1]<<'\n';
}
return 0;
}