Pagini recente » Cod sursa (job #1517161) | Cod sursa (job #891639) | Cod sursa (job #1340279) | Cod sursa (job #1846806) | Cod sursa (job #3135591)
#include <fstream>
#include <set>
#include <map>
#include <string>
int main() {
std::ifstream fin("zeap.in");
std::ofstream fout("zeap.out");
std::set<long long> set;
std::map<long long, long long> diff;
char c[16];
long long x;
while (fin.getline(c, 16)) {
switch (c[0])
{
case 'I':
{
std::string str = c;
x = std::stoll(str.substr(2));
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':
{
std::string str = c;
x = std::stoll(str.substr(2));
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 << std::endl;
break;
}
case 'C':
{
std::string str = c;
x = std::stoll(str.substr(2));
if (set.find(x) != set.end())
fout << 1 << std::endl;
else
fout << 0 << std::endl;
break;
}
case 'M':
{
if (c[1] == 'A') {
if (set.size() > 1)
fout << *set.rbegin() - *set.begin() << std::endl;
else
fout << -1 << std::endl;
}
else {
if (set.size() > 1) {
fout << diff.begin()->first << std::endl;
}
else
fout << -1 << std::endl;
}
break;
}
}
}
return 0;
}