Pagini recente » Cod sursa (job #1412451) | Cod sursa (job #2962164) | Cod sursa (job #353510) | Cod sursa (job #2731976) | Cod sursa (job #775572)
Cod sursa(job #775572)
#include <cstdio>
#include <fstream>
#include <set>
using namespace std;
set<int> S;
multiset<int> D;
char opt[20];
inline int get()
{
int number = 0;
for (int i = 2; opt[i] >= '0' && opt[i] <= '9'; ++i)
number = number * 10 + (opt[i] - '0');
return number;
}
int main()
{
freopen("zeap.in", "r", stdin);
freopen("zeap.out", "w", stdout);
while (gets(opt))
{
int num;
if (opt[0] == 'I')
{
num = get();
set<int>::iterator it = S.find(num);
if (it == S.end())
{
S.insert(num);
set<int>::iterator itn = S.upper_bound(num);
if (itn != S.end())
{
set<int>::iterator aux = itn;
--aux;
multiset<int>::iterator mnow = D.find(*itn - num);
D.insert(*itn - num);
if (aux == S.begin()) continue;
--aux;
mnow = D.find(*itn - *aux);
D.erase(mnow);
}
--itn;
if (itn == S.begin()) continue;
--itn;
D.insert(num - *itn);
}
}
else if (opt[0] == 'S')
{
num = get();
set<int>::iterator it = S.find(num);
if (it == S.end()) printf("-1\n");
else
{
S.erase(it);
if (S.size() == 0) continue;
set<int>::iterator itn = S.upper_bound(num);
if (itn != S.end())
{
multiset<int>::iterator mnow = D.find(*itn - num);
D.erase(mnow);
}
if (itn != S.begin())
{
--itn;
multiset<int>::iterator mnow = D.find(num - *itn);
D.erase(mnow);
int auxv = *itn;
++itn;
if (itn != S.end())
D.insert(*itn - auxv);
}
}
}
else if (opt[0] == 'C')
{
num = get();
set<int>::iterator it = S.find(num);
if (it == S.end()) printf("0\n");
else printf("1\n");
}
else if (opt[1] == 'A')
{
if (S.size() >= 2)
{
set<int>::iterator it = S.end();
--it;
printf("%d\n", *it - *S.begin());
}
else printf("-1\n");
}
else
{
if (S.size() >= 2) printf("%d\n", *D.begin());
else printf("-1\n");
}
}
}