Cod sursa(job #2123645)

Utilizator eu3neuomManghiuc Teodor-Florin eu3neuom Data 6 februarie 2018 14:36:49
Problema Zeap Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.79 kb
#include <bits/stdc++.h>

using namespace std;

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

const int INF = 2e9;

set < int > nums;
multiset < int > dist;

int main() {
    nums.insert(-INF);
    nums.insert(INF);

    string s;
    while(fin >> s) {
        if(s == "I") {
            int x;
            fin >> x;

            if(nums.count(x) == 0) {
                auto hi = nums.upper_bound(x);
                auto lo = hi;
                --lo;

                if(*hi != INF) dist.insert(*hi - x);
                if(*lo != -INF) dist.insert(x - *lo);
                if(*hi != INF && *lo != -INF) dist.erase(dist.find(*hi - *lo));

                nums.insert(x);
            }
        }
        if(s == "S") {
            int x;
            fin >> x;

            if(nums.count(x)) {
                nums.erase(x);

                auto hi = nums.upper_bound(x);
                auto lo = hi;
                --lo;

                if(*hi != INF) dist.erase(dist.find(*hi - x));
                if(*lo != -INF) dist.erase(dist.find(x - *lo));
                if(*hi != INF && *lo != -INF) dist.insert(*hi - *lo);
            } else {
                fout << "-1\n";
            }
        }
        if(s == "C") {
            int x;
            fin >> x;

            fout << min(1, (int)nums.count(x)) << "\n";
        }
        if(s == "MAX") {
            if((int)nums.size() < 4) {
                fout << "-1\n";
            } else {
                auto lo = nums.begin(); ++lo;
                auto hi = nums.end(); --hi; --hi;

                fout << *hi - *lo << "\n";
            }
        }
        if(s == "MIN") {
            if((int)nums.size() < 4) {
                fout << "-1\n";
            } else {
                fout << *dist.begin() << "\n";
            }
        }
    }    

    return 0;
}