Pagini recente » Cod sursa (job #193759) | Cod sursa (job #2783292) | Cod sursa (job #3240660) | Cod sursa (job #1681184) | Cod sursa (job #134340)
Cod sursa(job #134340)
#include <fstream>
#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 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)
{
ifstream fin(iname);
ofstream fout(oname);
char buffer[16], firstch, secondch;
pair <set <int>::iterator, bool> ret;
set <int>::iterator it, itup, itlow, last;
int n;
while (fin.getline(buffer, 16))
{
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())
mymultiset.erase(mymultiset.find(*itup - *itlow));
if (itup != myset.end())
mymultiset.insert(*itup - n);
if (ret.first != myset.begin())
mymultiset.insert(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())
mymultiset.erase(mymultiset.find(n - *itlow));
if (itup != myset.end())
mymultiset.erase(mymultiset.find(*itup - n));
if (it != myset.begin() && itup != myset.end())
mymultiset.insert(*itup - *itlow);
myset.erase(it);
}
else
fout << -1 << '\n';
}
if (firstch == 'C')
{
read(buffer, n);
fout << (myset.find(n) != myset.end() ? 1 : 0) << '\n';
}
if (firstch == 'M')
{
if (myset.size() > 1)
{
if (secondch == 'A')
{
last = myset.end();
last --;
fout << *last - *myset.begin() << '\n';
}
else
fout << *mymultiset.begin() << '\n';
}
else
fout << -1 << '\n';
}
}
fin.close();
fout.close();
return 0;
}