Pagini recente » Cod sursa (job #406732) | Cod sursa (job #1869036) | Cod sursa (job #871878) | Cod sursa (job #1672117) | Cod sursa (job #2899280)
#include <fstream>
#include <set>
#include <unordered_set>
#include <string>
std::ifstream fin("zeap.in");
std::ofstream fout("zeap.out");
std::set<int> zeap;
std::unordered_set<int> zeap_fast;
int main()
{
int min1 = -1, min2 = -1;
// fout << "meow";
std::string op;
while (fin >> op) {
if (op == "MAX") fout << (zeap.size() > 1 ? *zeap.rbegin() - *zeap.begin() : -1) << '\n';
else if (op == "MIN") {
// fout << "min1 = " << min1 << " min2 = " << min2 << '\n';
if (zeap.size() < 2) fout << -1 << '\n';
else if (min1 != -1 && min2 != -1) fout << min1 - min2 << '\n';
else {
// fout << "meow";
long long dif = 1000000000000;
auto prev = zeap.begin();
for (auto it = next(prev); it != zeap.end(); ++it) {
// fout << *it - *prev << " ";
if (*it - *prev < dif) dif = *it - *prev, min1 = *it, min2 = *prev;
prev = it;
}
fout << dif << '\n';
}
}
else {
int x;
fin >> x;
if (op == "I") {
if (zeap_fast.insert(x).second) {
auto ins = zeap.insert(x).first;
if (min1 != -1) {
if (x != *zeap.rbegin()) {
int dif = *next(ins) - *ins;
if (dif < min1 - min2) min1 = *next(ins), min2 = *ins;
}
if (x != *zeap.begin()) {
int dif = *ins - *prev(ins);
if (dif < min1 - min2) min1 = *ins, min2 = *prev(ins);
}
}
}
}
else if (op == "S") {
if (!zeap_fast.erase(x)) fout << -1 << '\n';
else {
zeap.erase(x);
if (min1 == x || min2 == x) min1 = min2 = -1;
}
}
else {
if (zeap_fast.find(x) != zeap_fast.end()) fout << 1 << '\n';
else fout << 0 << '\n';
}
}
}
return 0;
}