Pagini recente » Cod sursa (job #881347) | Cod sursa (job #3159181) | Cod sursa (job #1832777) | Cod sursa (job #67968) | Cod sursa (job #299450)
Cod sursa(job #299450)
#include <cstdio>
#define N 200010
using namespace std;
int n,h[N],poz[N];
void adaugare(int x)
{
int g,nr;
n++;
nr=n;
poz[n]=n;
h[n]=x;
while (h[nr/2]<h[nr]&&nr>=2)
{
g=h[nr/2];
h[nr/2]=h[nr];
h[nr]=g;
g=poz[nr];
poz[nr]=poz[nr/2];
poz[nr/2]=g;
nr=nr/2;
}
}
void stergere(int x)
{
int k,g,nr,i=1;
while (poz[i]!=x)
i++;
h[i]=h[n];
h[n]=0;
poz[i]=poz[n];
poz[n]=0;
nr=n-1;
k=i;
while ((h[k]<h[2*k]||h[k]<h[2*k+1])&&2*k<=n)
{
if (h[k]<h[2*k])
{
g=h[k];
h[k]=h[k*2];
h[k*2]=g;
g=poz[i];
poz[i]=poz[i*2];
poz[i*2]=g;
k=k*2;
}
else
if (h[k]<h[2*k+1])
{
g=h[k];
h[k]=h[k*2+1];
h[k*2+1]=g;
g=poz[i];
poz[i]=poz[i*2+1];
poz[i*2+1]=g;
k=k*2+1;
}
}
}
int main ()
{
int m,i,x,k,j,min=150000;
FILE *f=fopen("heapuri.in","r");
FILE *g=fopen("heapuri.out","w");
fscanf(f,"%d ",&m);
for (i=1;i<=m;i++)
{
fscanf(f,"%d",&k);
if (k==1)
{
fscanf(f,"%d",&x);
adaugare(x);
}
if (k==2)
{
fscanf(f,"%d",&x);
stergere(x);
}
if (k==3)
{min=150000;
for (j=n;j>n/2-1;j--)
{
if(h[j]<min&&j!=0&&h[j]!=0)
min=h[j];
}
fprintf(g,"%d ",min);
fprintf(g,"\n");
}
}
fclose(f);
fclose(g);
return 0;
}