Pagini recente » Cod sursa (job #549654) | Cod sursa (job #1200034) | Cod sursa (job #2406086) | Cod sursa (job #1341062) | Cod sursa (job #2323536)
#include <fstream>
#include <set>
#define its set <int> :: iterator
using namespace std;
ifstream cin ("zeap.in");
ofstream cout ("zeap.out");
set <int> zeap;
multiset <int> zeapmin;
string s;
int x, cnt;
bool search(int x) {
return (zeap.find(x) != zeap.end() ? 1 : 0);
}
void rem(its it, its it2, its it3) {
its i = zeapmin.find(*it - *it2), end = zeapmin.end();
if(it != zeap.begin() && i != end)
zeapmin.erase(i);
its j = zeapmin.find(*it3 - *it), end2 = zeapmin.end();
if(it3 != zeap.end() && j != end2)
zeapmin.erase(j);
}
int main() {
while(cin >> s) {
cnt++;
if(s == "I") {
cin >> x;
if(search(x))
cout << "-1\n";
else {
zeap.insert(x);
its it = zeap.find(x), it2 = it, it3 = it; it2--; it3++;
if(it != zeap.begin())
zeapmin.insert(*it - *it2);
if(it3 != zeap.end())
zeapmin.insert(*it3 - *it);
}
} else if(s == "S") {
cin >> x;
if(!search(x))
cout << "-1\n";
else {
its it = zeap.find(x), it2 = it, it3 = it; it2--; it3++;
rem(it, it2, it3);
if(it != zeap.begin() && it3 != zeap.end())
zeapmin.insert(*it3 - *it2);
zeap.erase(x);
}
} else if(s == "C") {
cin >> x;
cout << search(x) << "\n";
} else if(s == "MAX") {
its it, it2;
if(zeap.size()) {
it = zeap.end(); it--;
it2 = zeap.begin();
}
cout << (zeap.size() < 2 ? -1 : *it - *it2) << "\n";
} else {
cout << (zeap.size() < 2 ? -1 : *(zeapmin.begin())) << "\n";
}
}
return 0;
}