Cod sursa(job #3349508)

Utilizator Matei_AndronacheMatei Andronache Matei_Andronache Data 30 martie 2026 22:29:06
Problema Zeap Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.86 kb
#include <bits/stdc++.h>

#define int long long
#define xmax 1000000000
using namespace std;
ifstream in ("zeap.in");
ofstream out ("zeap.out");

struct zeap{

    set <int> s={-67LL*xmax,67LL*xmax};
    multiset <int> dif={2*67LL*xmax};

    void ins(int x)
    {
        if (s.find(x)!=s.end())
            return;
        s.insert(x);
        auto poz=s.find(x),pv=prev(poz),nx=next(poz);
        dif.erase(dif.find(*nx-*pv));
        dif.insert(*poz-*pv);
        dif.insert(*nx-*poz);
    }

    int ers(int x)
    {
        if (s.find(x)==s.end())
            return -1;
        auto poz=s.find(x),pv=prev(poz),nx=next(poz);
        dif.insert(*nx-*pv);
        dif.erase(dif.find(*poz-*pv));
        dif.erase(dif.find(*nx-*poz));
        s.erase(x);
        return 0;
    }

    bool fnd(int x)
    {
        return s.find(x)!=s.end();
    }

    int mx()
    {
        if (s.size()<4)
            return -1;
        return *prev(prev(s.end()))-*next(s.begin());
    }

    int mn()
    {
        if (s.size()<4)
            return -1;
        return *dif.begin();
    }
}z;

signed main()
{

    string s;
    while(getline(in,s))
    {
        stringstream a;
        a<<s;
        if (s[0]=='I')
        {
            int x;
            char aux;
            a>>aux>>x;
            z.ins(x);
        }
        if (s[0]=='S')
        {
            int x;
            char aux;
            a>>aux>>x;
            if (z.ers(x)==-1)
                out<<"-1\n";
        }
        if (s[0]=='C')
        {
            int x;
            char aux;
            a>>aux>>x;
            out<<z.fnd(x)<<'\n';
        }
        if (s.substr(0,3)=="MAX")
        {
            out<<z.mx()<<'\n';
        }
        if (s.substr(0,3)=="MIN")
        {
            out<<z.mn()<<'\n';
        }
    }
    return 0;
}