Pagini recente » Cod sursa (job #1396256) | Cod sursa (job #1111671) | Cod sursa (job #1608880) | Cod sursa (job #2537041) | Cod sursa (job #1552796)
#include <bits/stdc++.h>
#define inf 2000000002
using namespace std;
map <int, int> dif;
set <int> m;
char s[20];
int n;
void minsert(int y)
{
int x, z;
set <int> :: iterator it1, it2;
it1 = m.lower_bound (y);
it2 = it1;
-- it2;
x = *it2;
z = *it1;
if (z - x >= 0)
-- dif[z - x];
if (y - x >= 0)
++ dif[y - x];
if (z - y >= 0)
++ dif[z - y];
m.insert(y);
}
int merase(int y)
{
int x, z;
if (m.find(y) == m.end())
return 1;
set <int> :: iterator it1, it2;
it1 = m.upper_bound (y);
it2 = m.lower_bound (y);
-- it2;
m.erase(y);
x = *it2;
z = *it1;
if (z - x >= 0)
++ dif[z - x];
if (y - x >= 0)
-- dif[y - x];
if (z - y >= 0)
-- dif[z - y];
return 0;
}
int val()
{
int i, n = strlen(s), v = 0;
for (i = 2; i < n && s[i] >= '0' && s[i] <= '9'; ++ i)
v = v * 10 + (s[i] - '0');
return v;
}
int mmin()
{
if (m.size() >= 4)
return dif.begin() -> first;
return -1;
}
int mmax()
{
set <int> :: iterator it1, it2;
if (m.size() >= 4)
{
it1 = m.begin();
++ it1;
it2 = m.end();
-- it2;
-- it2;
return *it2 - *it1;
}
return -1;
}
void rsw()
{
freopen("zeap.in", "r", stdin);
freopen("zeap.out", "w", stdout);
m.insert(inf);
m.insert(-inf / 2);
while (gets(s))
{
if (s[0] == 'I')
minsert(val());
else if (s[0] == 'S')
{
if (merase(val()))
printf("-1\n");
}
else if (s[0] == 'C')
printf ("%d\n", m.find(val()) != m.end());
else
{
if (s[1] == 'I')
printf("%d\n", mmin());
else
printf("%d\n", mmax());
}
}
}
int main()
{
rsw();
return 0;
}