Pagini recente » Cod sursa (job #330623) | Cod sursa (job #2736915) | Cod sursa (job #2125270) | Cod sursa (job #230975) | Cod sursa (job #1806036)
#include <fstream>
using namespace std;
ifstream f("heapuri.in");
ofstream g("heapuri.out");
void heap_up(int);
void heap_down(int);
void Swap(int,int);
int i,x,n,m,k,poz,c,val[200010],H[200010],P[200010];
int main()
{
f>>n;
for(;n;n--)
{
f>>c;
if(c==3)
{
g<<val[H[1]]<<'\n';
continue;
}
f>>x;
if(c==1)
{
m++;
val[++k]=x;
H[m]=k;P[k]=m;
heap_up(m);continue;
}
poz=P[x];
H[poz]=H[m];
P[H[poz]]=poz;
m--;
heap_up(poz);
heap_down(poz);
}
return 0;
}
void heap_up(int fiu)
{
int tata=fiu>>1;
if(!tata)
return;
if(val[H[fiu]]<val[H[tata]])
{
Swap(tata,fiu);
heap_up(tata);
}
}
void heap_down(int tata)
{
int fiu=tata*2;
if(fiu>m)
return;
if(fiu<m&&val[H[fiu]]>val[H[fiu+1]])
fiu++;
if(val[H[fiu]]<val[H[tata]])
{
Swap(tata,fiu);
heap_down(fiu);
}
}
void Swap(int i,int j)
{
int aux=H[i];
H[i]=H[j];H[j]=aux;
P[H[i]]=i;P[H[j]]=j;
}