Cod sursa(job #483947)

Utilizator andrei.dAndrei Diaconeasa andrei.d Data 11 septembrie 2010 00:15:59
Problema Zeap Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.33 kb
#include <cstdio>
#include <set>
#include <algorithm>

using namespace std;

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

#define nmax 100

char s[nmax];
set<int> Zeap;

void adfile(void){
	
	freopen(file_in,"r",stdin);
	freopen(file_out,"w",stdout);

    return ;
}

void solve(void){
	
	int i,x,ok,l;
	int min1,min2;
	int max1,max2;
	while(fgets(s,nmax,stdin)){
		
		
		l=strlen(s);
		
		if (s[0]=='I'){//inserez
			i=2;
			x=0;
			while(s[i]>='0' && s[i]<='9'){
				x=x*10+s[i]-'0';
				i++;
			}
			

					
			ok=0;
			set<int> :: iterator it;
			for (it=Zeap.begin();it!=Zeap.end();++it)
				 if (*it==x)
					 ok=1;
			if (!ok)	 
			    Zeap.insert(x);
			continue;
		}
		
		if (s[0]=='S'){//sterg
			i=2;
			x=0;
			while(s[i]>='0' && s[i]<='9'){
				x=x*10+s[i]-'0';
				i++;
			}
			
			ok=0;
			set<int> :: iterator it;
			for (it=Zeap.begin();it!=Zeap.end();++it)
				 if (*it==x){
					Zeap.erase(*it);
					ok=1;
					break;
				 }
			if (!ok)
				printf("-1\n");
		}
		
		if (s[0]=='C'){//caut
			i=2;
			x=0;
			while(s[i]>='0' && s[i]<='9'){
				x=x*10+s[i]-'0';
				i++;
			}
			
			ok=0;
			set<int> :: iterator it;
			for (it=Zeap.begin();it!=Zeap.end();++it)
				 if (*it==x){
					ok=1;
					break;
				 }
			if (!ok)
				printf("0\n");
			else
				printf("1\n");
		}
		
		if (s[0]=='M' && s[1]=='I'){//minimu`
		    
			if (Zeap.size()<2)
				printf("-1\n");
			else{
				min1=0x3f3f3f3f;
				min2=0x3f3f3f3f;
				set<int> :: iterator it;
		        for (it=Zeap.begin();it!=Zeap.end();++it)
				     if (*it<min1)
						 min1=*it;
				for (it=Zeap.begin();it!=Zeap.end();++it)
				     if (*it<min2 && min1!=*it)
						 min2=*it;	 
				//printf("%d %d\n", min1,min2);
				printf("%d\n", (min2-min1));
			}	
			
		}
		
		if (s[0]=='M' && s[1]=='A'){//minimu`
		    
			if (Zeap.size()<2)
				printf("-1\n");
			else{
				min1=0x3f3f3f3f;
				max2=0;
				set<int> :: iterator it;
		        for (it=Zeap.begin();it!=Zeap.end();++it)
				     if (*it<min1)
						 min1=*it;
				for (it=Zeap.begin();it!=Zeap.end();++it)
				     if (*it>max2)
						 max2=*it;	 
				//printf("%d %d\n", min1,max2);
				printf("%d\n", (max2-min1));
			}	
			
		}
			
			
	}
}

int main(){
	
	adfile();
	solve();
	
	return 0;
	
}