Pagini recente » Cod sursa (job #146252) | Cod sursa (job #1646008) | Cod sursa (job #270938) | Cod sursa (job #1036811) | Cod sursa (job #1524180)
#include <cstdio>
using namespace std;
int jh,v[200100],heap[200100],poz[200100];
void up_heap(int nod)
{
while(nod>1 && v[heap[nod]]<v[heap[nod/2]])
{
swap(heap[nod],heap[nod/2]);
swap(poz[heap[nod]],poz[heap[nod/2]]);
nod/=2;
}
}
void down_heap(int nod)
{
while(nod*2<=jh && (v[heap[nod]]>v[heap[nod*2]] || (nod*2+1<=jh && v[heap[nod]]>v[heap[nod*2+1]])))
if(v[heap[nod*2]]<v[heap[nod*2+1]] || nod*2==jh)
{
swap(heap[nod],heap[nod*2]);
swap(poz[heap[nod]],poz[heap[nod*2]]);
nod*=2;
}
else
{
swap(heap[nod],heap[nod*2+1]);
swap(poz[heap[nod]],poz[heap[nod*2+1]]);
nod=nod*2+1;
}
}
int main()
{
freopen("heapuri.in","r",stdin);
freopen("heapuri.out","w",stdout);
int n,j=0,tip,x;
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
scanf("%d",&t);
if(t==1)
{
scanf("%d",&x);
v[++j]=x;
heap[++jh]=j;
poz[j]=jh;
up_heap(jh);
}
if(t==2)
{
scanf("%d",&x);
heap[poz[x]]=heap[jh];
poz[heap[jh]]=poz[x];
jh--;
down_heap(poz[x]);
}
if(t==3) printf("%d\n",v[heap[1]]);
}
return 0;
}