Cod sursa(job #2899522)

Utilizator RosianuRobertRosianu Robert RosianuRobert Data 8 mai 2022 22:02:59
Problema Zeap Scor 30
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 2.25 kb
#include <bits/stdc++.h>

using namespace std;
//ifstream f("planeta.in");
//ofstream g("planeta.out");
ifstream f("zeap.in");
ofstream g("zeap.out");
set<int>zeap;
priority_queue<pair<int,pair<int,int>>, vector<pair<int,pair<int,int>>>, greater<pair<int,pair<int,int>>> > dif;
int x,n;
char c;
string caracter;
int main()
{
    while(f>>caracter)
    {
        c = caracter[0];
        if(c == 'I')
        {
            f>>n;
            zeap.insert(n);
            set<int>::iterator it = zeap.find(n);
            if(it!=zeap.begin())
            {
                --it;
                dif.push({n-*it,{*it,n}});
                ++it;

            }
            if(++it!=zeap.end())
            {
                dif.push({*it-n,{*it,n}});
            }
        }
        if(c == 'S')
        {
            f >> n;
            if(zeap.find(x) != zeap.end())
            {
                set<int>::iterator it = zeap.find(n);
                set<int>::iterator it1 = ++it;
                --it;
                set<int>::iterator it2 = --it;
                dif.push({*it1 - *it2, {*it1, *it2}});
                zeap.erase(n);
            }
            else
            {
                g << -1 << '\n';
            }
        }
        if(c == 'C')
        {
            f >> n;
            if(zeap.find(n) == zeap.end())
                g << 0 << '\n';
            else
                g << 1 << '\n';
        }
        if(c == 'M')
        {
            c = caracter[2];
            if(c == 'N')
            {
                if(zeap.size() < 2)
                    g << -1 << '\n';
                else
                {
                    while(!dif.empty() && (zeap.find(dif.top().second.first) == zeap.end() || zeap.find(dif.top().second.second) == zeap.end()))
                    {
                        dif.pop();
                    }
                    g << dif.top().first << '\n';
                }
            }
            if(c == 'X')
            {
                if(zeap.size() < 2)
                    g << -1 << '\n';
                else
                {
                    g << *(--zeap.end()) - *(zeap.begin()) << '\n';
                }
            }
        }
    }
    return 0;
}