Cod sursa(job #2630245)

Utilizator etienAndrone Stefan etien Data 24 iunie 2020 20:36:17
Problema Zeap Scor 10
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.8 kb
#include<bits/stdc++.h>
using namespace std;
ifstream fin("zeap.in");
ofstream fout("zeap.out");
set<int>z;
multiset<int>dif;
const int INF=1000000001;
int main()
{
    string op;
    z.insert(INF);
    z.insert(-INF);
    dif.insert(2*INF);
    while(fin>>op)
    {
        if(op=="I")
        {
            int x;
            fin>>x;
            if(z.find(x)==z.end())
            {
                z.insert(x);
                //for (auto x : z) cout << x << endl;
                auto it=z.find(x);
                auto itst=z.find(x);
                --itst;
                auto itdr=z.find(x);
                ++itdr;
                //cout<<*itdr-*itst<<endl;
                dif.erase(dif.find(*itdr-*itst));
                dif.insert(*itdr-*it);
                dif.insert(*it-*itst);
            }
        }
        else if(op=="S")
        {
            int x;
            fin>>x;
            auto it=z.find(x);
            if(it!=z.end())
                {
                    auto itst=z.find(x);
                    --itst;
                    auto itdr=z.find(x);
                    ++itdr;
                    dif.erase(dif.find(*itdr-*it));
                    dif.erase(dif.find(*it-*itst));
                    dif.insert(*itdr-*itst);
                    z.erase(x);
                }
            else fout<<"-1\n";

        }
        else if(op=="C")
        {
            int x;
            fin>>x;
            if(z.find(x)!=z.end())
                fout<<1<<"\n";
            else fout<<0<<"\n";
        }
        else if(op=="MAX")
        {
            fout<<*(--(--z.end()))-*(++z.begin())<<"\n";
        }
        else
        {
            if(z.size()!=1)
                fout<<*dif.begin()<<"\n";
        }
        cout<<"o"<<endl;
    }
}