Cod sursa(job #2534938)

Utilizator lucametehauDart Monkey lucametehau Data 31 ianuarie 2020 09:53:59
Problema Zeap Scor 80
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.62 kb
#include <fstream>
#include <set>

using namespace std;

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

string s;
int nr;

set <int> zeap;
multiset <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.insert(*it - *st);
        if(dr != it)
          dif.insert(*dr - *it);
        if(st != it && dr != it)
          dif.erase(dif.find(*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.erase(dif.find(*it - *st));
        if(dr != it)
          dif.erase(dif.find(*dr - *it));
        if(st != it && dr != it)
          dif.insert(*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() << "\n";
    }
  }
  return 0;
}