Pagini recente » Cod sursa (job #2400745) | Cod sursa (job #1284269) | Cod sursa (job #1837388) | Cod sursa (job #1117839) | Cod sursa (job #351623)
Cod sursa(job #351623)
#include <stdio.h>
using namespace std;
#define NMAX 200002
int v[NMAX],cr[NMAX],tp[NMAX];
void CombHeap(int i, int n)
{
int val=v[i],timp=tp[i],t=i,f=2*i;
while (f<=n)
{
if (f<n)
if (v[f]>v[f+1])++f;
if (val>v[f]) {v[t]=v[f]; cr[tp[f]]=t; tp[t]=tp[f];
t=f; f<<=1;}
else f=n+1;
}
v[t]=val; tp[t]=timp; cr[timp]=t;
}
int main()
{
FILE *fin=fopen("heapuri.in","r");
FILE *fout=fopen("heapuri.out","w");
int nrop;
fscanf(fin,"%d",&nrop);
int n=0,T=0,tip,i;
while (nrop--)
{
fscanf(fin,"%d",&tip);
switch (tip)
{
case 1: { fscanf(fin,"%d",&v[++n]); cr[++T]=n; tp[n]=T;
for (i=n/2;i;i--) CombHeap(i,n);
break;
}
case 2: { int x;
fscanf(fin,"%d",&x);
int poz=cr[x]; cr[x]=0;
v[poz]=v[n]; tp[poz]=tp[n]; cr[tp[n]]=poz; --n;
for (i=n/2;i;--i) CombHeap(i,n);
break;
}
case 3: { fprintf(fout,"%d\n",v[1]);}
}
}
fclose(fin); fclose(fout);
}