Pagini recente » Cod sursa (job #2795500) | Cod sursa (job #932949) | Cod sursa (job #1776901) | Cod sursa (job #1672369) | Cod sursa (job #2297000)
#include <fstream>
using namespace std;
ifstream f("heapuri.in");
ofstream g("heapuri.out");
int n,m,nr,v[200011],x,c;
struct
{
int val,poz;
}heap[200011];
void insert_heap()
{
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)
{
swap(heap[poz],heap[poz/2]);
v[m]=poz/2;
v[heap[poz].poz]=poz;
poz/=2;
}
}
void delete_heap(int poz)
{
poz=v[poz];
swap(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)
{
swap(heap[poz],heap[poz*2]);
v[heap[poz].poz]=poz;
poz*=2;
v[heap[poz].poz]=poz;
}
else
{
swap(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)
{
swap(heap[poz],heap[poz*2]);
v[heap[poz].poz]=poz;
poz*=2;
v[heap[poz].poz]=poz;
}
}
int main()
{
f>>n;
while(n--)
{
f>>c;
if(c==1)
{
f>>x;
m++;
insert_heap();
}
else if(c==2)
{
f>>x;
delete_heap(x);
}
else
{
g<<heap[1].val<<'\n';
}
}
return 0;
}