Pagini recente » Cod sursa (job #2044066) | Cod sursa (job #2413143) | Cod sursa (job #1747618) | Cod sursa (job #2599251) | Cod sursa (job #2144039)
#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);
int n, pos;
set < int > s;
multiset < int > ms;
string a;
char v[100];
void get_op() {
a.clear();
pos = 0;
n = strlen(v);
while(pos < n && isalpha(v[pos])) {
a += v[pos];
pos++;
}
}
void get_num(int &num) {
num = 0;
while(pos < n && !isdigit(v[pos]))
pos++;
while(pos < n && isdigit(v[pos])) {
num = num * 10 + (v[pos] - '0');
pos++;
}
}
int main()
{
s.insert(INF);
s.insert(-INF);
while(in.getline(v, 100)) {
//cout << v << '\n';
//in >> a;
get_op();
if(a == "I") {
int x;
//in >> x;
//in >> a;
get_num(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;
//in >> a;
get_num(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;
//in >> a;
get_num(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;
}