Cod sursa(job #1685666)

Utilizator robx12lnLinca Robert robx12ln Data 11 aprilie 2016 19:58:38
Problema Zeap Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 3.24 kb
#include<fstream>
#include<set>
#include<cstring>
using namespace std;
ifstream fin("zeap.in");
ofstream fout("zeap.out");
set<int> v;
multiset<int> dif;
set<int>::iterator it, it1, save;
multiset<int>::iterator IT;
int n, k;
char s[50], c[5];
int main(){
    n = 0;
    while( fin.get(s,45) ){
        n = strlen( s );
        k = -1;
        int i = 0;
        for( i = 0; i < n; i++){
            if( s[i] != ' ' ){
                c[++k] = s[i];
            }else{
                break;
            }
        }
        i++;
        int number = 0;
        for( ; i < n; i++ ){
            number = number * 10 + ( s[i] - '0' );
        }
        if( c[0] == 'I' ){
            v.insert( number );
            if( v.size() > 1 ){
                it1 = v.end();
                it1--;
                it = it1;
                it1--;
                dif.insert( (*it) - (*it1) );
            }
        }
        if( c[0] == 'S' ){
            it = v.find( number );
            save  = it;
            if( it != v.end() ){
                if( v.size() > 1 ){
                    if( it == v.begin() ){
                        it1 = it;
                        it1++;
                        IT = dif.find( (*it1) - (*it) );
                        dif.erase( IT );
                    }else{
                        it1 = v.end();
                        it1--;
                        if( it == it1 ){
                            it1--;
                            IT = dif.find( (*it) - (*it1) );
                            dif.erase( IT );
                        }else{
                            it1 = it;
                            it1--;
                            IT = dif.find( (*it) - (*it1) );
                            dif.erase( IT );
                            it1 = it;
                            it1++;
                            IT = dif.find( (*it1) - (*it) );
                            dif.erase( IT );
                            it--;
                            dif.insert( (*it1) - (*it) );
                        }
                    }
                }
                v.erase( save );
            }else{
                fout << "-1\n";
            }
        }
        if( c[0] == 'C' ){
            it = v.find( number );
            if( it != v.end() ){
                fout << "1\n";
            }else{
                fout << "0\n";
            }
        }
        if( c[0] == 'M' && c[1] == 'A' ){
            if( v.size() > 1 ){
                it = v.end();
                it--;
                it1 = v.begin();
                fout << ( (*it) - (*it1) ) << "\n";
            }else{
                fout << "-1\n";
            }
        }
        if( c[0] == 'M' && c[1] == 'I' ){
            IT = dif.begin();
            fout << (*IT) << "\n";
        }

        /*
        for( it = v.begin(); it != v.end(); it++ ){
            fout << *it << " ";
        }
        fout << "\n";
        if( dif.empty() ){
            fout << "-1\n";
        }else{
            for( IT = dif.begin(); IT != dif.end(); IT++ ){
                fout << *IT << " ";
            }
            fout << "\n";
        }
        */

        fin.get();
    }
    return 0;
}