Cod sursa(job #2534941)

Utilizator lucametehauDart Monkey lucametehau Data 31 ianuarie 2020 10:00:48
Problema Zeap Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.82 kb
#include <fstream>
#include <set>
#include <map>

using namespace std;

ifstream cin ("zeap.in");
ofstream cout ("zeap.out");

string s;
int nr;

set <int> zeap;
map <int, int> dif;

int main() {
  while(cin >> s) {
    if(s.size() == 1)
      cin >> nr;
    if(s == "I") {
      if(zeap.find(nr) == zeap.end()) {
        zeap.insert(nr);
        auto it = zeap.find(nr);
        auto st = it, dr = it;
        if(it != zeap.begin())
          st--;
        it++;
        if(it != zeap.end())
          dr++;
        it--;
        if(st != it)
          dif[*it - *st]++;
        if(dr != it)
          dif[*dr - *it]++;
        if(st != it && dr != it) {
          dif[*dr - *st]--;
          if(!dif[*dr - *st])
            dif.erase(*dr - *st);
        }
      }
    } else if(s == "S") {
      auto it = zeap.find(nr);
      if(it == zeap.end())
        cout << "-1\n";
      else {
        auto st = it, dr = it;
        if(it != zeap.begin())
          st--;
        it++;
        if(it != zeap.end())
          dr++;
        it--;
        if(st != it) {
          dif[*it - *st]--;
          if(!dif[*it - *st])
            dif.erase(*it - *st);
        }
        if(dr != it) {
          dif[*dr - *it]--;
          if(!dif[*dr - *it])
            dif.erase(*dr - *it);
        }
        if(st != it && dr != it)
          dif[*dr - *st]++;
        zeap.erase(nr);
      }
    } else if(s == "C") {
      cout << (zeap.find(nr) != zeap.end()) << "\n";
    } else if(s == "MAX") {
      if(zeap.size() < 2)
        cout << "-1\n";
      else {
        auto it = zeap.end(); it--;
        cout << (*it - *zeap.begin()) << "\n";
      }
    } else {
      if(dif.empty())
        cout << "-1\n";
      else
        cout << dif.begin()->first << "\n";
    }
  }
  return 0;
}