Pagini recente » Cod sursa (job #406811) | Cod sursa (job #2752205) | Cod sursa (job #1631178) | Cod sursa (job #503097) | Cod sursa (job #3242197)
#include <bits/stdc++.h>
#define int long long
#define fi first
#define se second
#define sz(a) int((a).size())
#define all(a) (a).begin(), (a).end()
#define lsb(x) (x & (-x))
#define vi vector<int>
#define YES { cout << "YES" << endl; return; }
#define NO { cout << "NO" << endl; return; }
using ll = long long;
using pii = std::pair<int, int>;
using namespace std;
ifstream fin ("zeap.in");
ofstream fout ("zeap.out");
void solve_testcase() {
string s;
set<int> nr;
multiset<int> dif;
auto insert = [&](int x) {
if (!nr.empty()) {
auto it = nr.lower_bound(x);
if (it != nr.begin())
dif.insert(x - *prev(it));
if (it != nr.end())
dif.insert(*it - x);
if (it != nr.begin() && it != nr.end())
dif.erase(dif.find(*it - *prev(it)));
}
nr.insert(x);
};
auto erase = [&](int x) {
if (nr.find(x) != nr.end()) {
if (nr.size() > 1) {
auto it = nr.find(x);
if (it != nr.begin())
dif.erase(dif.find(x - *prev(it)));
if (next(it) != nr.end())
dif.erase(dif.find(*next(it) - x));
if (it != nr.begin() && next(it) != nr.end()) {
dif.insert(*next(it) - *prev(it));
}
}
nr.erase(x);
return;
}
fout << "-1\n";
};
auto get_max = [&]() -> int {
if (nr.size() >= 2)
return *nr.rbegin() - *nr.begin();
return -1;
};
auto get_min = [&]() -> int {
if (!dif.empty())
return *dif.begin();
return -1;
};
auto search = [&](int x) -> int {
return (nr.find(x) != nr.end());
};
while (getline(fin, s)) {
if (s == "MAX")
fout << get_max() << '\n';
if (s == "MIN")
fout << get_min() << '\n';
if (s[0] == 'I')
insert(stoi(s.substr(2)));
if (s[0] == 'S')
erase(stoi(s.substr(2)));
if (s[0] == 'C')
fout << search(stoi(s.substr(2))) << "\n";
}
}
signed main() {
cin.tie(nullptr)->sync_with_stdio(false);
int t = 1;
// cin >> t;
while (t--)
solve_testcase();
return 0;
}