Pagini recente » Borderou de evaluare (job #2168078) | Cod sursa (job #2707776) | Cod sursa (job #2143964)
#include <algorithm>
#include <iostream>
#include <fstream>
#include <cstring>
#include <set>
using namespace std;
ifstream in("zeap.in");
ofstream out("zeap.out");
const int INF = (1 << 30);
set < int > s;
multiset < int > ms;
string a;
int main()
{
s.insert(INF);
s.insert(-INF);
while(in >> a) {
//in >> a;
if(a == "I") {
int x;
in >> x;
if(s.find(x) != s.end())
continue;
set < int > :: iterator it2 = s.upper_bound(x);
set < int > :: iterator it1 = it2;
it1--;
s.insert(x);
if(*it1 != -INF)
ms.insert(x - *it1);
if(*it2 != INF)
ms.insert(*it2 - x);
if(*it1 != -INF && *it2 != INF)
ms.erase(ms.find(*it2 - *it1));
} else if(a == "S") {
int x;
in >> x;
if(s.find(x) == s.end()) {
out << "-1\n";
} else {
s.erase(x);
set < int > :: iterator it2 = s.upper_bound(x);
set < int > :: iterator it1 = it2;
it1--;
if(*it1 != -INF)
ms.erase(ms.find(x - *it1));
if(*it2 != INF)
ms.erase(ms.find(*it2 - x));
if(*it1 != -INF && *it2 != INF)
ms.insert(*it2 - *it1);
}
} else if(a == "C") {
int x;
in >> x;
out << (s.find(x) != s.end()) << '\n';
} else if(a == "MAX") {
if(s.size() < 4) {
out << "-1\n";
} else {
set < int > :: iterator minn = s.begin();
set < int > :: iterator maxx = s.end();
minn++;
maxx--;
maxx--;
out << (*maxx - *minn) << '\n';
}
} else if(a == "MIN") {
if(s.size() < 4) {
out << "-1\n";
} else {
out << *ms.begin() << '\n';
}
}
}
in.close();
out.close();
return 0;
}