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