Cod sursa(job #2323379)

Utilizator lucametehauDart Monkey lucametehau Data 19 ianuarie 2019 10:24:23
Problema Zeap Scor 10
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.38 kb
#include <fstream>
#include <set>

using namespace std;

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

set <int> zeap, zeapmin;

string s;
int x, mind = 2e9;

bool search(int x) {
  return ((zeap.find(x) != zeap.end()) ? 1 : 0);
}

int main() {
  while(cin >> s) {
    if(s == "I") {
      cin >> x;
      if(search(x))
        cout << "-1\n";
      else {
        zeap.insert(x);
        auto it = zeap.find(x);
        auto it2 = it, it3 = it; it2--; it3++;
        if(it != zeap.begin())
          zeapmin.insert(*it - *it2);
        if(it3 != zeap.end())
          zeapmin.insert(*it3 - *it);
      }
    } else if(s == "S") {
      cin >> x;
      if(!search(x))
        cout << "-1\n";
      else {
        auto it = zeap.find(x), it2 = it, it3 = it; it2--; it3++;
        if(it != zeap.begin())
          zeapmin.erase(*it - *it2);
        if(it3 != zeap.end())
          zeapmin.erase(*it3 - *it);
        if(it != zeap.begin() && it3 != zeap.end())
          zeapmin.insert(*it3 - *it2);
        zeap.erase(x);
      }
    } else if(s == "C") {
      cin >> x;
      cout << search(x) << "\n";
    } else if(s == "MAX") {
      auto it = zeap.end(), it2 = zeap.begin(); it--;
      cout << (zeap.size() < 2 ? -1 : *it - *it2) << "\n";
    } else {
      cout << (zeap.size() < 2 ? -1 : *(zeapmin.begin())) << "\n";
    }
  }
  return 0;
}