Pagini recente » Cod sursa (job #2331580) | Cod sursa (job #1527666) | Cod sursa (job #2043248) | Cod sursa (job #2361162) | Cod sursa (job #2898428)
#include <iostream>
#include <set>
#include <fstream>
#include <string>
using namespace std;
ifstream fin("zeap.in");
ofstream fout("zeap.out");
set<int>S;
multiset<int>difference;
void insereaza(set<int>& S, int element)
{
if (S.find(element) != S.end())
return;
if (S.size() == 0)
{
S.insert(element);
return;
}
if (element < *(S.begin()))
{
difference.insert(*(S.begin()) - element);
}
else if (element > *(S.rbegin()))
{
difference.insert(element - *(S.rbegin()));
}
else
{
set<int>::iterator p2 = S.upper_bound(element), p1;
p1 = p2; --p1;
difference.erase(difference.find(*(p2)-*(p1)));
difference.insert(element - *(p1));
difference.insert(*(p2)-element);
}
S.insert(element);
}
void sterge(set<int>& S, int element)
{
if (S.find(element) == S.end() || S.size() == 0)
{
fout << "-1\n";
return;
}
if (S.size() == 1)
{
S.clear();
return;
}
if (element == *(S.begin()))
{
S.erase(S.begin());
difference.erase(difference.find(*(S.begin()) - element));
}
else if (element == *S.rbegin())
{
S.erase(S.find(*S.rbegin()));
difference.erase(element - *S.rbegin());
}
else
{
set<int>::iterator p = S.find(element), p1, p2;
p1 = p; --p1;
p2 = p; ++p2;
difference.insert(*p2 - *p1);
difference.erase(difference.find(element - *p1));
difference.erase(difference.find(*p2 - element));
S.erase(p);
}
}
int main()
{
string sir;
while (getline(fin, sir))
{
switch (sir[0])
{
case 'I':
{
int element = 0;
for (int i = 2; i < sir.size(); ++i)
element = element * 10 + sir[i] - '0';
insereaza(S, element);
}
break;
case 'S':
{
int element = 0;
for (int i = 2; i < sir.size(); ++i)
element = element * 10 + sir[i] - '0';
sterge(S, element);
}
break;
case 'C':
{
int element = 0;
for (int i = 2; i < sir.size(); ++i)
element = element * 10 + sir[i] - '0';
if (S.find(element) != S.end())
{
fout << "1\n";
}
else fout << "0\n";
}
break;
case 'M':
{
if (sir == "MAX")
{
if (S.size() < 2)
{
fout << "-1" << '\n';
}
else
{
fout << *(S.rbegin()) - (*S.begin()) << '\n';
}
}
else if (sir == "MIN")
{
if (difference.size() == 0)
{
fout << "-1" << '\n';
}
else
{
fout << *(difference.begin()) << '\n';
}
}
}
break;
}
}
return 0;
}