Cod sursa(job #567571)

Utilizator BeniLehelBeni Lehel BeniLehel Data 30 martie 2011 10:32:47
Problema Heapuri Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.73 kb
#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;
}