Pagini recente » Cod sursa (job #1040948) | Cod sursa (job #746945) | Cod sursa (job #128534) | Cod sursa (job #2986976) | Cod sursa (job #1787725)
#include <iostream>
#include <stdio.h>
#include <fstream>
#include <stdlib.h>
#include <set>
#include <string>
using namespace std;
set <int> v;
multiset <int> diff;
void insert_zeap ( int x ){
std::pair<std::set<int>::iterator,bool> ret;
ret = v.insert(x);
if(ret.second == false){
return;
}
set <int>::iterator it1,it2,it3;
it1 = it2 = it3 = ret.first;
it1--;
it3++;
if( it2 != v.begin() && it3!= v.end() ){
diff.erase( diff.find( (*it3) - (*it1) ) );
}
if( it2 != v.begin() ){
diff.insert( (*it2) - (*it1) );
}
if( it3 != v.end() ){
diff.insert( (*it3) - (*it2) );
}
}
int delete_zeap ( int x ){
std::set<int>::iterator ret;
ret = v.find(x);
if(ret == v.end() ){
return -1;
}
set< int >::iterator it1, it2, it3;
it1 = it2 = it3 = ret;
--it1; ++it3;
if(it2 != v.begin() && it3 != v.end()){
diff.insert( (*it3) - (*it1) );
}
if(it2 != v.begin()){
diff.erase(diff.find( (*it2) - (*it1) ) );
}
if(it3 != v.end()){
diff.erase(diff.find( (*it3) - (*it2) ) );
}
v.erase(ret);
return 0;
}
int getval( string &s ){
int nr=0;
int pos = s.find(' ') + 1 ;
for(; pos < s.length() ; pos++){
nr = nr * 10 + s[pos] - '0' ;
}
return nr;
}
int cauta_zeap( int x ){
return v.find( x ) != v.end();
}
int max_dif(){
if( v.size()<2 ){
return -1;
}
return *v.rbegin() - *v.begin();
}
int min_dif(){
if( v.size()<2 ){
return -1;
}
return *diff.begin();
}
int main(){
string sir;
int val, sol ;
ifstream fin("zeap.in");
ofstream fout ("zeap.out");
// freopen ("zeap.in","r",stdin);
// freopen("zeap.out","w",stdout);
while ( getline(fin, sir ) ){
if( sir[0] == 'I' ){
val = getval(sir);
insert_zeap( val );
}else if ( sir[0] == 'S' ){
val = getval(sir);
sol = delete_zeap ( val );
if(sol == -1 ){
fout<<-1<<'\n';
}
}else if ( sir[0] == 'C' ){
val = getval(sir);
fout << cauta_zeap ( val ) << '\n';
}else{
if(sir[1] == 'A' ){
fout << max_dif() << '\n';
}else{
fout << min_dif() << '\n';
}
}
}
return 0;
}