Cod sursa(job #339126)

Utilizator AndreiDDiaconeasa Andrei AndreiD Data 8 august 2009 13:15:54
Problema Zeap Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.88 kb
#include <cstdio>
#include <cstring>
#include <algorithm>

using namespace std;

#define file_in "zeap.in"
#define file_out "zeap.out"

#define Inf 0x3f3f3f3f

long int nr,zeap[301000];
char s[20];


void insert(long int x)
{
	long int ok=0,i;
	for (i=1;i<=nr && !ok;++i)
		 if (zeap[i]==x)
		      ok=1;

	if (!ok)
		zeap[++nr]=x;
}

void sterge(long int x)
{
	long int ok=0,poz,i;
	for (i=1;i<=nr && !ok;++i)
		 if (zeap[i]==x)
		      poz=i,
			  ok=1;

	if (!ok)
		printf("-1\n");
	else
	{
		for (i=poz;i<=nr;++i)
			 zeap[i]=zeap[i+1];
		nr--;
		//return 0;
	}
}


long int cauta(long int x)
{
    long int ok=0,i;
	for (i=1;i<=nr && !ok;++i)
		 if (zeap[i]==x)
		      ok=1;

	return ok;
}

long int max_dif()
{
    sort(zeap+1,zeap+nr+1);
	return zeap[nr]-zeap[1];
}

long int min_dif()
{
	sort(zeap+1,zeap+nr+1);
    return zeap[2]-zeap[1];
}


int main()
{
	long int i,x;
	freopen(file_in,"r",stdin);
	freopen(file_out,"w",stdout);

	memset(zeap,0,sizeof(zeap));
	nr=0;

	while(gets(s))
	{
		//gets(s);
		i=0;
		if (s[0]=='I')//insert
		{
			i=2;
			x=0;
			while(s[i]>='0' && s[i]<='9')
			{
				x=x*10+s[i]-'0';
				i++;
			}
			insert(x);
		}
		else
		if (s[0]=='S')//sterge
		{
			i=2;
			x=0;
			while(s[i]>='0' && s[i]<='9')
			{
				x=x*10+s[i]-'0';
				i++;
			}
			sterge(x);
				//printf("-1\n");

		}
		else
		if (s[0]=='C')//cauta
		{
			i=2;
			x=0;
			while(s[i]>='0' && s[i]<='9')
			{
				x=x*10+s[i]-'0';
				i++;
			}
			printf("%ld\n", cauta(x));
		}
		else
		if (s[0]=='M' && s[1]=='A')//max
		{
			if (nr<2)
				printf("-1\n");
			else
				printf("%ld\n", max_dif());
		}
		else
		if (s[0]=='M' && s[1]=='I')//min
        {
			if (nr<2)
				printf("-1\n");
			else
				printf("%ld\n", min_dif());
		}
    }

	fclose(stdin);
	fclose(stdout);

	return 0;
}