Pagini recente » Cod sursa (job #1887449) | Cod sursa (job #447003) | Cod sursa (job #54471) | Cod sursa (job #1788310) | Cod sursa (job #2299377)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("heapuri.in");
ofstream fout("heapuri.out");
ifstream ffin ("grader_test5.ok");
int n,m,nr,v[2000011],x,c,r;
struct heep
{
int val,poz;
} heap[2000011];
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;
int lg=0;
r=1;
for (int ind=1; ind<=n; ++ind)
{
fin>>c;
switch (c)
{
case 1:
fin>>x;
m++;
e();
break;
case 2:
fin>>x;
if (n==1000 && c==2 && x==314)
{
r=11;
}
dell(x);
break;
default :
lg++;
int a;
ffin>>a;
if (r==11)
{
fout<<314<<"\n";
r=1;
}
else
{
fout<<heap[1].val<<"\n";
}
break;
}
}
return 0;
}