Cod sursa(job #2899450)

Utilizator bigboiberkeBerke Musellim bigboiberke Data 8 mai 2022 20:21:56
Problema Zeap Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.9 kb
#include <bits/stdc++.h>

using namespace std;

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

string s;
int nr;

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

int main() {
  while(in >> s) {
    if(s.size() == 1)
      in >> 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;
}