Cod sursa(job #45057)

Utilizator cos_minBondane Cosmin cos_min Data 31 martie 2007 23:20:38
Problema Zeap Scor 60
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.21 kb
#include <stdio.h>
#include <fstream>
#include <set>
using namespace std;

#define in "zeap.in"
#define out "zeap.out"

char linie[21];
set<int> p;
set<int>::iterator it; 
set<int>::iterator it2; 

void Erase(int);
void Search(int);
void Insert(int);
void Minim();
void Maxim();

int main()
{
    int j, aux, ok = 1;
    FILE *fin = fopen(in,"r");
    freopen(out,"w",stdout);
    
    while ( fgets(linie,20,fin) ) 
    {
         
         if ( linie[0] == 'M' )
         {
              if ( linie[1] == 'A' ) Maxim();
              else                   Minim();
         }
         else
         {
             j = 2;
             aux=0;
             while ( linie[j] >= '0' && linie[j] <= '9' ) aux *= 10, aux += (int)linie[j]-48, j++;
             
            // printf("%d\n", aux);
             
             if ( linie[0] == 'I' ) Insert(aux);
             if ( linie[0] == 'S' ) Erase(aux);
             if ( linie[0] == 'C' ) Search(aux); 
         }
    }
}

void Insert(int aux)
{
     p.insert(aux);
}

void Search(int aux)
{
     if ( p.size() == 0 ) printf("0\n");
     else
     {
         it = p.find(aux);
         if ( it == p.end() ) printf("0\n"); 
         else                 printf("1\n");
     }
 
}

void Erase(int aux)
{
     if ( p.size() == 0 ) printf("-1\n");
     else
     {
         it = p.find(aux);
         if ( it == p.end() ) printf("-1\n"); 
         else                 p.erase( aux );
     }
}

void Maxim()
{
     if ( p.size() <= 1 ) printf("-1\n");
     else
     {
         int val = 0;
         it = p.begin();
         val = *it;
         it = p.end(); 
         it--;
         
         val = *it-val;
         printf("%d\n",val);
     }  
}

void Minim()
{
     int minim = 1000001;
     if ( p.size() <= 1 ) printf("-1\n");
     else
     {
         it2 = p.begin();
         it2++;
         for ( it = p.begin(); it2 != p.end(); it++, it2++ )
         {
             if ( *it2-*it == 1 ) 
             {
                minim = 1;
                break;
             }
             else if ( *it2-*it <= minim ) minim = *it2-*it;
         
         }
         printf("%d\n", minim);
     }
}