Cod sursa(job #2898097)

Utilizator mirceaspPetcu Mircea mirceasp Data 5 mai 2022 23:44:55
Problema Zeap Scor 70
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 2.9 kb
#include <fstream>
#include <set>
#include <iostream>
#include <string>
#include <cmath>
using namespace std;
set<long long >zeap;
set<long long> diferente;
int main()
{
    ifstream f("zeap.in");
    ofstream g("zeap.out");
    string operatie;
    long long nr;
    set<long long >::iterator curent,previos,nextp,l;
    long long i = 0;
    while (f>>operatie)
    {
        if(operatie == "I") {
            f >> nr;
            if (zeap.find(nr) != zeap.end())
                continue;
            else { zeap.insert(nr); i++;}
            if(zeap.size()>=2) {
                curent = zeap.find(nr);
                previos  = curent;
                nextp = curent;
                nextp++;previos--;
                l = zeap.end();
                l--;
                if(curent != zeap.begin() && curent != l) {
                    diferente.insert(abs(*curent - *nextp));
                    diferente.insert(abs(*curent - *previos));
                    diferente.erase(abs(*nextp-*previos));
                }
                else if(curent != zeap.begin())
                    diferente.insert(abs(*curent-*previos));
                else if(curent != l)
                    diferente.insert(abs(*curent-*nextp));
            }
        } else if(operatie == "C")
        {
            f>>nr;
            if(zeap.find(nr) != zeap.end())
                g<<1<<'\n';
            else
                g<<0<<'\n';
        } else if(operatie == "S")
        {
            f>>nr;
            if(zeap.find(nr) != zeap.end()) {
                curent = zeap.find(nr);
                previos = curent;
                nextp = curent;
                previos--;
                nextp ++;
                l = zeap.end();
                l--;
                if(curent != zeap.begin() && curent != l) {
                    diferente.erase(abs(*curent - *nextp));
                    diferente.erase(abs(*curent - *previos));
                    diferente.insert(abs(*nextp-*previos));
                }
                else if(curent != zeap.begin())
                    diferente.erase(abs(*curent-*previos));
                else if(curent != l)
                    diferente.erase(abs(*curent-*nextp));
                diferente.insert(abs(*nextp-*previos));
                zeap.erase(nr);
            }
            else
                g<<-1<<'\n';
        } else if(operatie == "MAX") {
            if (zeap.size() < 2)
                g << -1 << '\n';
            else {
                l = zeap.end();
                l--;
                curent = zeap.begin();
                g<<abs(*l-*curent)<<'\n';
            }
        } else if(operatie == "MIN") {
            if(zeap.size()>=2) {
                long long minim = *diferente.begin();
                g << minim << '\n';
            } else g<<-1<<'\n';
        }

    }
    f.close();g.close();
    return 0;
}