Pagini recente » Cod sursa (job #2845208) | Cod sursa (job #3262705) | Cod sursa (job #1197822) | Cod sursa (job #765453)
Cod sursa(job #765453)
#include <fstream>
#define NRMAX 200001
using namespace std;
ifstream f("heapuri.in");
ofstream g("heapuri.out");
int hp[NRMAX],ap[NRMAX],a[NRMAX],n,nr,l;
void push(int);
void pop(int);
int main()
{
f>>n;a[0]=1000000000;
for (int i=1;i<=n;i++)
{
int tp,x,p;
f>>tp;
switch (tp)
{
case 1:
f>>x;
push(x);
break;
case 2:
f>>p;
pop(p);
break;
case 3:g<<a[hp[1]]<<'\n';
}
}
f.close();g.close();
return 0;
}
void push(int val)
{
nr++;l++;
a[nr]=val;
ap[nr]=l;
hp[l]=nr;
int poz=l;
while (a[hp[poz]]<a[hp[poz/2]] && poz/2>0)
{
int aux=hp[poz];
hp[poz]=hp[poz/2];
hp[poz/2]=aux;
int x=hp[poz],y=hp[poz/2];
aux=ap[x];ap[x]=ap[y];
ap[y]=aux;
poz=poz/2;
}
}
void pop(int poz)
{
hp[ap[poz]]=0;
int aux=ap[poz];
ap[poz]=-1;
poz=aux;
int poz1=2*poz;
if (a[hp[poz1]]>a[hp[2*poz+1]]) poz1=2*poz+1;
while (poz1<=l)
{
int aux=hp[poz];
hp[poz]=hp[poz1];
hp[poz1]=aux;
ap[hp[poz]]=poz;
poz=poz1;poz1=2*poz;
if (a[hp[poz1]]>a[hp[2*poz+1]]) poz1=2*poz+1;
}
if (poz==l) l--;
}