Pagini recente » Cod sursa (job #243892) | Cod sursa (job #1083321) | Cod sursa (job #2355097) | Cod sursa (job #2951589) | Cod sursa (job #134333)
Cod sursa(job #134333)
#include <cstdio>
#include <cstdlib>
#include <set>
#include <vector>
#include <iterator>
#include <algorithm>
using namespace std;
const char iname[] = "zeap.in";
const char oname[] = "zeap.out";
set <int> myset;
multiset <int> mymultiset;
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[16];
fi = fopen(iname, "r");
fo = fopen(oname, "w");
while (fgets(buffer, 16, fi))
{
char firstchar = buffer[0];
char secondchar = buffer[1];
if (firstchar == 'I')
{
int x = read(buffer);
if (myset.size() > 0)
{
if (myset.find(x) == myset.end())
{
set <int>::iterator itup = myset.upper_bound(x), itlow;
itlow = itup, itlow --;
if (itup != myset.begin() && itup != myset.end())
mymultiset.erase(mymultiset.find(*itup - *itlow));
if (itup != myset.begin())
mymultiset.insert(x - *itlow);
if (itup != myset.end())
mymultiset.insert(*itup - x);
myset.insert(itlow, x);
}
}
else
myset.insert(x);
}
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 (it != myset.begin())
mymultiset.erase(mymultiset.find(x - *itlow));
if (itup != myset.end())
mymultiset.erase(mymultiset.find(*itup - x));
if (it != myset.begin() && itup != myset.end())
mymultiset.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", *mymultiset.begin());
}
else
fprintf(fo, "-1\n");
}
}
fcloseall();
return 0;
}