Pagini recente » Cod sursa (job #2211351) | Cod sursa (job #1067905) | Cod sursa (job #2405911) | Cod sursa (job #2549551) | Cod sursa (job #567571)
Cod sursa(job #567571)
#include<algorithm>
#include<set>
#include<stdio.h>
#include<stdlib.h>
FILE *f=fopen("heapuri.in","r");
FILE *g=fopen("heapuri.out","w");
typedef struct alma
{
int x,sz;
alma *a,*b;
}ALMA;
alma *l,*p,*kukac;
int n,m,be,s=1;
void megy(alma *p)
{
if(p->x==-1)
{
p->x=be;
p->sz=s;
s++;
}
else
if(!p->a || !p->b)
{
kukac=(alma*)malloc(sizeof(alma));
kukac->a=NULL;
kukac->b=NULL;
kukac->x=be;
kukac->sz=s;
s++;
if(!p->a)
p->a=kukac;
else p->b=kukac;
}
else
if(p->a && p->x>=be)
megy(p->a);
else
if(p->b && p->x<=be)
megy(p->b);
}
void torol(alma *o)
{
if(p->sz==be)
{
alma *kukac;
kukac=(alma*)malloc(sizeof(alma));
kukac=p->a;
kukac->b=p->b;
l=kukac;
}
else
{
if(o->a!=NULL)
if(be==o->a->sz)
{
kukac=(alma*)malloc(sizeof(alma));
if(o->a->a)
{
kukac=o->a->a;
kukac->b=o->a->b;
o->a=kukac;
}
else o->a=NULL;
}
if(o->b!=NULL)
if(be==o->b->sz)
{
kukac=(alma*)malloc(sizeof(alma));
if(o->b->a)
{
kukac=o->b->a;
kukac->b=o->b->b;
o->b=kukac;
}
else o->b=NULL;
}
if(o->a)
torol(o->a);
if(o->b)
torol(o->b);
}
}
void min(alma *o)
{
if(o->a!=NULL)
min(o->a);
else if(l->x>=o->x)fprintf(g,"%d\n",o->x);
else fprintf(g,"%d\n",p->x);
}
void ki(alma *p)
{
fprintf(g,"%d ",p->x);
if(p->a)
ki(p->a);
if(p->b)
ki(p->b);
}
int main()
{
l=(alma*)malloc(sizeof(alma));
l->a=NULL;
l->b=NULL;
l->x=-1;
l->sz=s;
p=l;
fscanf(f,"%d",&n);
for(int i=0;i<n;i++)
{
fscanf(f,"%d",&m);
switch(m)
{
case 1: {fscanf(f,"%d",&be);megy(l);break;}
case 2: {fscanf(f,"%d",&be);torol(l);break;}
case 3: {min(l);break;}
}
}
//ki(p);
return 0;
}