Pagini recente » Cod sursa (job #1588345) | Cod sursa (job #54473) | Cod sursa (job #988728) | Cod sursa (job #2598257) | Cod sursa (job #822185)
Cod sursa(job #822185)
#include<cstdio>
using namespace std;
int v[200001],u,poz[200001],num,ord[200001];
void swap (int &a,int &b)
{
int aux;
aux=a;
a=b;
b=aux;
}
void upheap (int nod)
{
if (nod>1)
if (v[nod/2]>v[nod])
{swap(v[nod/2],v[nod]);
swap(poz[nod/2],poz[nod]);
ord[poz[nod/2]]=nod/2;
ord[poz[nod]]=nod;
upheap(nod/2);
}
}
void downheap( int nod)
{
int fiu,fiu2;
if (nod*2<=u)
{ fiu=nod*2;
fiu2=nod*2+1;
if (nod*2+1<=u && v[fiu]>v[fiu2]){
swap(v[fiu2],v[nod]);
swap(poz[fiu2],poz[nod]);
ord[poz[fiu2]]=fiu2;
ord[poz[fiu]]=fiu;
downheap(fiu2);
}
else
{ swap(v[fiu],v[nod]);swap(poz[fiu],poz[nod]); ord[poz[fiu]]=fiu;
ord[poz[nod]]=nod; downheap(fiu);}
}
}
void inserare(int x)
{
int i;
if (u==0){ v[++u]=x; poz[u]=u;ord[u]=u;}
else
{ v[++u]=x;poz[u]=u; ord[u]=u;
upheap(u);
}
}
void stergere(int x)
{
v[ord[x]]=v[u];
u--;
downheap(ord[x]);
}
void afisare()
{
printf("%d\n",v[1]);
}
int main()
{
freopen("heapuri.in","r",stdin);
freopen("heapuri.out","w",stdout);
int n,i,op,x;
scanf("%d",&n);
for (i=1;i<=n;++i)
{
scanf("%d",&op);
if ((op==1)||(op==2))scanf("%d",&x);
if (op==1)
{ inserare(x);}
if (op==2)
stergere(x);
if (op==3)
afisare();
}
return 0;
}