Pagini recente » Cod sursa (job #3278207) | Cod sursa (job #846017) | Cod sursa (job #1615701) | Cod sursa (job #2071901) | Cod sursa (job #3242191)
#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;
set<int>nr, dif;
auto insert = [&](int x) {
if (nr.size() >= 1) {
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())
dif.erase(*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())
dif.erase(x - *prev(it));
if (it2 != nr.end())
dif.erase(*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, s.size() - 2)));
if (s[0] == 'S')
erase(stoi(s.substr(2, s.size() - 2)));
if (s[0] == 'C')
fout << search(stoi(s.substr(2, s.size() - 2))) << "\n";
}
}
signed main() {
cin.tie(nullptr)->sync_with_stdio(false);
int t = 1;
// cin >> t;
while (t--)
solve_testcase();
return 0;
}