Pagini recente » Cod sursa (job #2167515) | Cod sursa (job #3214028) | Cod sursa (job #1475518) | Cod sursa (job #2303351) | Cod sursa (job #139)
Cod sursa(job #139)
#include <cstdio>
#include <set>
const int INF = 0x3f3f3f3f;
using namespace std;
set<int> S;
multiset<int> mdif;
char s[128];
void inline readnumber(int &i)
{
char *p = s + 2; int k;
for (; '0' > *p || *p > '9'; p++);
for (k = 0; '0' <= *p && *p <= '9'; p++)
k = k * 10 + *p - '0';
i = k;
}
int main()
{
freopen("zeap.in", "rt", stdin);
freopen("zeap.out", "wt", stdout);
S.clear(); mdif.clear();
for (; fgets(s, 128, stdin); )
{
int i;
set<int> :: iterator it, it2, it3;
multiset<int> :: iterator tmp;
if (s[0] == 'M')
{
if (S.size() < 2)
{
printf("-1\n");
continue;
}
if (s[1] == 'A')
{
it = S.end(); it--;
printf("%d\n", *it - *S.begin());
}
else
printf("%d\n", *mdif.begin());
}
if (s[0] == 'I')
{
readnumber(i);
if (S.find(i) != S.end()) continue;
if (S.size() == 0)
{
S.insert(i);
continue;
}
it = S.upper_bound(i);
if (it != S.begin())
{
it2 = it; it2--;
if (*it > i)
{
tmp = mdif.find( *it - *it2 );
if (tmp != mdif.end())
mdif.erase( tmp );
if (*it - i < i - *it2)
mdif.insert( *it - i );
else
mdif.insert( i - *it2 );
}
else
mdif.insert( i - *it2 );
}
else
{
if (*it > i)
mdif.insert( *it - i );
}
S.insert(i);
}
if (s[0] == 'C')
{
readnumber(i);
printf("%d\n", (S.find(i) != S.end()));
}
if (s[0] == 'S')
{
readnumber(i);
if (S.find(i) == S.end())
{
printf("-1\n");
continue;
}
it = S.lower_bound(i);
it2 = S.upper_bound(i);
if (it != S.begin())
{
it3 = it; it3--;
tmp = mdif.find( i - *it3 );
if (tmp != mdif.end())
mdif.erase( tmp );
if (it2 != S.end())
{
tmp = mdif.find( *it2 - i );
if (tmp != mdif.end())
mdif.erase( tmp );
mdif.insert( *it2 - *it3 );
}
}
else
{
if (it2 != S.end())
{
tmp = mdif.find( *it2 - i );
if (tmp != mdif.end())
mdif.erase( tmp );
}
}
S.erase( S.lower_bound( i ) );
}
}
return 0;
}