Pagini recente » Cod sursa (job #3289824) | Cod sursa (job #251551) | Cod sursa (job #44376) | Cod sursa (job #2911119) | Cod sursa (job #134223)
Cod sursa(job #134223)
#include <cstdio>
#include <set>
#include <iterator>
#include <algorithm>
using namespace std;
const char iname[] = "zeap.in";
const char oname[] = "zeap.out";
set <int> myset;
multiset <int> mymset;
inline int read(char *p)
{
int n = 0;
for (; *p < '0' || *p > '9'; ++ p) ;
for (; '0' <= *p && *p <= '9'; ++ p)
n = n * 10 + (*p - '0');
return n;
}
int main(void)
{
FILE *fi, *fo;
char buffer[32];
fi = fopen(iname, "r");
fo = fopen(oname, "w");
while (fgets(buffer, 32, fi))
{
char firstchar = buffer[0];
char secondchar = buffer[1];
if (firstchar == 'I')
{
int x = read(buffer);
pair <set <int>::iterator, bool> ret = myset.insert(x);
if (ret.second == true)
{
set <int>::iterator itup = ret.first, itlow = ret.first;
itup ++;
itlow --;
if (itlow != ret.first && itup != myset.end())
{
mymset.erase(*itup - *itlow);
mymset.insert(*itup - x);
mymset.insert(x - *itlow);
}
if (itup != myset.end())
mymset.insert(*itup - x);
if (itlow != ret.first)
mymset.insert(x - *itlow);
}
}
if (firstchar == 'S')
{
int x = read(buffer);
set <int>::iterator it = myset.find(x);
if (it != myset.end())
{
set <int>::iterator itup = it, itlow = it;
itup ++;
itlow --;
if (itlow != it)
mymset.erase(x - *itlow);
if (itup != myset.end())
mymset.erase(*itup - x);
if (itlow != it && itup != myset.end())
mymset.insert(*itup - *itlow);
myset.erase(it);
}
else
fprintf(fo, "-1\n");
}
if (firstchar == 'C')
{
int x = read(buffer);
fprintf(fo, "%d\n", (myset.find(x) != myset.end() ? 1 : 0));
}
if (firstchar == 'M')
{
if (myset.size() > 1)
{
if (secondchar == 'A')
{
set <int>::iterator last = myset.end();
last --;
fprintf(fo, "%d\n", *last - *myset.begin());
}
else
fprintf(fo, "%d\n", *mymset.begin());
} else
fprintf(fo, "-1\n");
}
}
fcloseall();
return 0;
}