Cod sursa(job #2896825)

Utilizator RobertuRobert Udrea Robertu Data 30 aprilie 2022 21:57:18
Problema Zeap Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 2.08 kb
#include <bits/stdc++.h>
using namespace std;

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

typedef pair<int, pair<int, int> > ppii;

set<int> bst;
priority_queue< ppii, vector<ppii>, greater<ppii> > pq;
string op;

int main() {
    int nr, aux, dif;

    while(fin >> op) {
        if(op[0] == 'I') {
            fin >> nr;
            
            if(bst.find(nr) == bst.end()) {
                bst.insert(nr);
                set<int>::iterator p = bst.find(nr);

                if( p != bst.begin() ) {
                    set<int>::iterator vecin = p;
                    --vecin;
                    pq.push(make_pair(*p - *vecin ,make_pair(*vecin, *p)));
                }

                if( p != --bst.end() ) {
                    set<int>::iterator vecin = p;
                    ++vecin;
                    pq.push(make_pair(*vecin - *p ,make_pair(*p, *vecin)));
                }
            }

        } else if(op[0] == 'S') {
            fin >> nr;
            
            if(bst.find(nr) == bst.end()) fout << "-1\n";
            else {
                set<int>::iterator p = bst.find(nr);

                if( p != bst.begin() ) {
                    set<int>::iterator vecinS = --p;

                    if( bst.find(nr) != --bst.end() ) {
                        set<int>::iterator vecinD = ++bst.find(nr);
                        pq.push(make_pair(*vecinD - *vecinS ,make_pair(*vecinS, *vecinD)));
                    }
                }
                bst.erase(nr); 
            }

        } else if(op[0] == 'C') {
            fin >> nr;
            if(bst.find(nr) == bst.end()) fout << "0\n"; else fout << "1\n";
        } else if(op[1] == 'A') {
            if(bst.size() < 2) fout << "-1\n"; else fout << *bst.rbegin() - *bst.begin() << '\n';
        } else {
            if(bst.size() < 2) fout << "-1\n";
                else {
                    while(bst.find(pq.top().second.first) == bst.end() || bst.find(pq.top().second.second) == bst.end())
                        pq.pop();
                    fout << pq.top().first << '\n';
                }
        }
    }
    return 0;
}