Pagini recente » Borderou de evaluare (job #1569386) | Cod sursa (job #2870561) | Cod sursa (job #465227) | Cod sursa (job #2939794) | Cod sursa (job #3242201)
#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 { fout << "YES" << endl; return; }
#define NO { fout << "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;
multiset<int>nr, dif;
auto brr = [&](int x) {
if (dif.find(x) != dif.end())
dif.erase(dif.find(x));
};
auto insert = [&](int x) {
if (!nr.empty()) {
auto it = nr.lower_bound(x);
auto it2 = nr.upper_bound(x);
if (it != nr.begin())
dif.insert(x - *prev(it));
if (it2 != nr.end())
dif.insert(*it2 - x);
if (it != nr.begin() && it2 != nr.end())
brr(*it2 - *prev(it));
}
nr.insert(x);
};
auto erase = [&](int x) {
if (nr.find(x) != nr.end()) {
if (nr.size() > 1) {
auto it = nr.lower_bound(x);
auto it2 = nr.upper_bound(x);
if (it != nr.begin())
brr(x - *prev(it));
if (it2 != nr.end())
brr(*it2 - x);
if (it != nr.begin() && it2 != nr.end())
dif.insert(*it2 - *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;
}