Cod sursa(job #2899640)

Utilizator bianca2002Bianca bianca2002 Data 9 mai 2022 00:01:13
Problema Zeap Scor 30
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.76 kb
#include <iostream>
#include <fstream>
#include <set>
#include <map>
#include <cstring>

using namespace std;

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

string s;
int x;

set <int> z;
map <int, int> d;

int main()
{
  while(f >> s) {
    if(s.size() == 1)
      f >> x;
    if(s == "I") {
      if(z.find(x) == z.end()) {
        z.insert(x);
        auto i = z.find(x);
        auto st = i;
        auto dr = i;
        if(i != z.begin())
          st--;
        i++;
        if(i!= z.end())
          dr++;
        i--;
        if(st != i)
          d[*i - *st]++;
        if(dr != i)
          d[*dr - *i]++;
        if(st != i && dr != i)
        {
          d[*dr - *st]--;
          if(!d[*dr - *st])
            d.erase(*dr - *st);
        }
      }
    } else if(s == "S")
     {
      auto i = z.find(x);
      if(i == z.end())
        g<<-1<<endl;
      else {
        auto st = i, dr = i;
        if(i != z.begin())
          st--;
        i++;
        if(i != z.end())
          dr++;
        i--;
        if(st != i) {
          d[*i - *st]--;
          if(!d[*i - *st])
            d.erase(*i - *st);
        }
        if(dr != i) {
          d[*dr - *i]--;
          if(!d[*dr - *i])
            d.erase(*dr - *i);
        }
        if(st != i && dr != i)
          d[*dr - *st]++;
        z.erase(x);
      }
    } else if(s == "C")
     {
      g << (z.find(x) != z.end()) <<endl;
    }
    else if(s == "MAX")
        {
      if(z.size() < 2)
        g << -1<<endl;
      else
       {
        auto i = z.end(); i--;
        g << (*i - *z.begin()) << endl;
      }
    } else {
      if(d.empty())
        g << -1<<endl;
      else
        g << d.begin()->first << endl;
    }
  }

}