Pagini recente » Cod sursa (job #3194063) | Cod sursa (job #1054728) | Cod sursa (job #3138603) | Cod sursa (job #2526658) | Cod sursa (job #2299365)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("heapuri.in");
ofstream fout("heapuri.out");
int n,m,nr,v[200011],x,c,r;
struct heep
{
int val,poz;
} heap[200011];
void swaap (heep* a, heep* b)
{
heep temp;
temp=*a;
*a=*b;
*b=temp;
}
void e()
{
nr++;
heap[nr].val=x;
heap[nr].poz=m;
v[m]=nr;
int poz=nr;
while(poz>1 && heap[poz].val<heap[poz/2].val)
{
swaap(&heap[poz],&heap[poz/2]);
v[m]=poz/2;
v[heap[poz].poz]=poz;
poz/=2;
}
}
void dell(int poz)
{
poz=v[poz];
swaap(&heap[poz],&heap[nr]);
nr--;
v[heap[poz].poz]=poz;
while(poz*2+1<=nr && (heap[poz].val>heap[poz*2].val or heap[poz].val>heap[poz*2+1].val))
{
if(heap[poz*2].val<heap[2*poz+1].val)
{
swaap(&heap[poz],&heap[poz*2]);
v[heap[poz].poz]=poz;
poz*=2;
v[heap[poz].poz]=poz;
}
else
{
swaap(&heap[poz],&heap[poz*2+1]);
v[heap[poz].poz]=poz;
poz*=2;
poz++;
v[heap[poz].poz]=poz;
}
}
if(poz*2<=nr && heap[poz].val>heap[poz*2].val)
{
swaap(&heap[poz],&heap[poz*2]);
v[heap[poz].poz]=poz;
poz*=2;
v[heap[poz].poz]=poz;
}
}
int main()
{
fin>>n;
r=1;
for (int ind=1;ind<=n;++ind)
{
fin>>c;
switch (c)
{
case 1:
fin>>x;
m++;
e();
break;
case 2:
fin>>x;
dell(x);
break;
default :
fout<<heap[1].val<<"\n";
break;
}
}
return 0;
}