Pagini recente » Cod sursa (job #2030230) | Cod sursa (job #1399752) | Cod sursa (job #1286293) | Cod sursa (job #1899057) | Cod sursa (job #320461)
Cod sursa(job #320461)
#include <cstdio>
using namespace std;
int h[100010],n,ord[100010],n2;
void inserare(int x)
{
int i,s,i2=n+1,s2;
n++;
n2++;
h[n]=x;
i=n;
ord[n]=n2;
while (h[i]<h[i/2])
{
s=h[i];
s2=ord[i];
ord[i]=ord[i/2];
ord[i/2]=s2;
h[i]=h[i/2];
h[i/2]=s;
i2=i;
i=i/2;
}
}
void stergere (int x)
{
int i,s,s2,j=1;;
while (ord[j]!=x)
j++;
h[j]=h[n];
ord[j]=ord[n];
h[n]=0;
ord[n]=0;
n--;
i=j;
if (h[i]>h[i*2] || h[i]>h[i*2+1])
{
s2=i;
while (h[i]>h[i*2]&&i*2<=n)
{
s=h[i];
h[i]=h[i*2];
h[i*2]=s;
s=ord[i];
ord[i]=ord[i*2];
ord[i*2]=s;
i=i*2;
}
i=s2;
while(h[i]>h[i*2+1]&&i*2+1<=n)
{
s=h[i];
h[i]=h[i*2+1];
h[i*2+1]=s;
s=ord[i];
ord[i]=ord[i*2+1];
ord[i*2+1]=s;
i=i*2+1;
}
}
}
int main()
{
int i,a,b,m;
FILE *f=fopen("heapuri.in","r");
FILE *g=fopen("heapuri.out","w");
fscanf(f,"%d ",&m);
for (i=0;i<m;i++)
{
fscanf(f,"%d ",&a);
if (a==1)
{
fscanf(f,"%d ",&b);
inserare(b);
}
if (a==2)
{
fscanf(f,"%d ",&b);
stergere(b);
}
if (a==3)
{
fprintf(g,"%d ",h[1]);
fprintf(g,"\n");
}
}
fclose(f);
fclose(g);
return 0;
}