Pagini recente » Cod sursa (job #1970844) | Cod sursa (job #1576515) | Cod sursa (job #271833) | Cod sursa (job #310760) | Cod sursa (job #3135560)
#include <fstream>
#include <set>
#include <map>
int main() {
std::ifstream fin("zeap.in");
std::ofstream fout("zeap.out");
std::set<long long> set;
std::map<long long, long long> diff;
while (fin.good()) {
char c;
long long x;
fin >> c;
switch (c)
{
case 'I':
{
fin >> x;
if (set.find(x) != set.end())
break;
if (set.size() > 0) {
auto next = set.upper_bound(x);
if (next == set.end()) {
next = std::prev(next);
++diff[x - *next];
}
else {
++diff[*next - x];
if (next != set.begin()) {
next = std::prev(next);
++diff[x - *next];
}
}
}
set.insert(x);
break;
}
case 'S':
{
fin >> x;
auto xpos = set.find(x);
if (xpos != set.end()) {
if (set.size() > 1) {
auto next = std::next(xpos);
if (next != set.end()) {
--diff[*next - x];
if (diff[*next - x] == 0)
diff.erase(*next - x);
}
if (xpos != set.begin()) {
next = std::prev(xpos);
--diff[x - *next];
if (diff[x - *next] == 0)
diff.erase(x - *next);
auto prev = next;
next = std::next(xpos);
if (next != set.end())
++diff[*next - *prev];
}
}
set.erase(x);
}
else
fout << -1 << '\n';
break;
}
case 'C':
fin >> x;
if (set.find(x) != set.end())
fout << 1 << '\n';
else
fout << 0 << '\n';
break;
case 'M':
fin >> c;
if (c == 'A') {
if (set.size() > 1)
fout << *set.rbegin() - *set.begin() << '\n';
else
fout << -1 << '\n';
}
else {
if (set.size() > 1) {
fout << diff.begin()->first << '\n';
}
else
fout << -1 << '\n';
}
fin >> c;
break;
}
}
return 0;
}