Cod sursa(job #1685714)
Utilizator | Data | 11 aprilie 2016 20:16:56 | |
---|---|---|---|
Problema | Zeap | Scor | 50 |
Compilator | cpp | Status | done |
Runda | Arhiva de probleme | Marime | 4.14 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' ){
it = v.find( number );
if( it == v.end() ){
v.insert( number );
if( v.size() > 1 ){
it = v.find( number );
if( it == v.begin() ){
it1 = it;
it1++;
dif.insert( (*it1) - (*it) );
}else{
it1 = v.end();
it1--;
if( it == it1 ){
it1--;
dif.insert( (*it) - (*it1) );
}else{
it1 = it;
it1++;
it--;
IT = dif.find( (*it1) - (*it) );
dif.erase( IT );
it++;
dif.insert( (*it1) - (*it) );
it--;
it1--;
dif.insert( (*it1) - (*it) );
}
}
}
}
}
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;
}