Cod sursa(job #2460774)

Utilizator TudorCaloianCaloian Tudor-Ioan TudorCaloian Data 24 septembrie 2019 12:33:42
Problema Zeap Scor 30
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 2.3 kb
#include <bits/stdc++.h>

using namespace std;

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

string s;
set <int> a;
multiset <int> dif;
set <int> :: iterator it, itr, itl;
int main()
{
    while(fin >> s)
    {
        int x;
        if(s == "I")
        {
            fin >> x;
           it =  a.insert(x).first;
          if(a.size() == 1) continue;
          itr = it;
          itl = it;
          itr++;
          if(it == a.begin())
          {
              dif.insert(*itr-*it);
          }
          else
            if(itr == a.end())
            {
                itl--;
                dif.insert(*it-*itl);
            }
            else
            {
                itl--;
                dif.erase(*itr-*itl);
                dif.insert(*itr-*it);
                dif.insert(*it-*itl);
            }
        }
        else
            if(s == "S")
            {
                fin >> x;
                if(a.find(x) == a.end())
                    fout << -1 << '\n';
                else
                 {
                     it = a.find(x);
                     itr = it;
                     itr++;
                     itl = it;
                     if(itr != a.end())
                     {
                         //itr++;
                         dif.erase(*itr-*it);
                     }
                     if(it != a.begin())
                     {
                         itl--;
                         dif.erase(*it-*itl);
                     }
                     if(it != a.begin() && it != a.end())
                        dif.insert(*itr-*itl);
                     a.erase(x);
                 }
            }
            else
                if(s == "MAX")
                {
                    it = a.end();
                    it--;
                    fout << *it-*a.begin() << '\n';
                }
                else
                    if(s == "C")
                    {
                        fin >> x;
                        if(a.find(x) == a.end())
                            fout << 0 << '\n';
                        else
                            fout << 1 << '\n';
                    }
                    else
                        fout << *dif.begin() << '\n';
    }

    return 0;
}