Pagini recente » Cod sursa (job #1133980) | Cod sursa (job #588328) | Cod sursa (job #1775043) | Cod sursa (job #183983) | Cod sursa (job #1808166)
#include <iostream>
#include <cstdio>
#include <set>
#include <map>
using namespace std;
char buf[30];
set<int> data;
map<int, int> dif;
set<int>::iterator it1, it2, it3;
void debug()
{
for (auto it = dif.begin(); it != dif.end(); ++it)
cerr << it->first << ":" << it->second << " ";
cerr << "\n";
}
inline void delOne(map<int, int> &s, int val)
{
int k = (--s[val]);
if (k == 0)
s.erase(val);
}
int main()
{
freopen("zeap.in", "r", stdin);
freopen("zeap.out", "w", stdout);
while (gets(buf))
{
if (buf[0] == 'M') {
if (buf[1] == 'A') {
if (data.size() < 2) {
printf("-1\n");
continue;
}
it2 = data.end(); it2--;
printf("%d\n", *it2 - *data.begin());
}
else {
if (data.size() < 2) {
printf("-1\n");
continue;
}
printf("%d\n", dif.begin()->first);
}
}
else {
int nr = 0;
for (int i = 2; buf[i] >= '0' && buf[i] <= '9'; i++)
nr = nr*10 + buf[i]-'0';
if (buf[0] == 'I') {
pair<set<int>::iterator, bool> p = data.insert(nr);
if (p.second == true) {
it2 = it1 = p.first;
++it2;
if (it2 != data.end()) {
dif[*it2 - nr]++;
if (it1 == data.begin()) continue;
it1--;
delOne(dif, *it2 - *it1);
}
it2--;
if (it2 == data.begin()) continue;
it2--;
dif[nr - *it2]++;
}
}
else if (buf[0] == 'S') {
it1 = data.find(nr);;
if (it1 == data.end()) printf("-1\n");
else
{
data.erase(it1);
if (data.size() == 0) continue;
it2 = data.upper_bound(nr);
if (it2 != data.end())
delOne(dif, *it2-nr);
if (it2 != data.begin())
{
--it2;
delOne(dif, nr - *it2);
int val = *it2;
++it2;
if (it2 != data.end())
dif[*it2 - val]++;
}
}
}
else if (buf[0] == 'C') {
printf("%d\n", data.find(nr) != data.end());
}
}
//debug();
}
return 0;
}