Pagini recente » Cod sursa (job #535637) | Cod sursa (job #2292620) | Cod sursa (job #1448593) | Cod sursa (job #1767959) | Cod sursa (job #1740894)
#include <iostream>
#include <fstream>
#include <map>
#include <set>
#include <cmath>
using namespace std;
ifstream in("zeap.in");
ofstream out("zeap.out");
map<int, int> mp;
set<int> S;
int id = 0;
void rem(int x) {
if(S.size() == 1) {
S.erase(S.begin());
return;
}
if(S.size() == 2) {
S.erase(x);
mp[abs(*S.begin()-x)]--;
return;
}
S.erase(x);
set<int>::iterator it = S.lower_bound(x);
set<int>::iterator en = it;
advance(en, -1);
if(it == S.end()) {
mp[x-*en]--;
} else if(it == S.begin()) {
mp[*it-x]--;
} else {
mp[*it-*en]++;
mp[x-*en]--;
mp[*it-x]--;
}
}
void ins(int x) {
if(S.size() == 0) {
S.insert(x);
return;
}
if(S.size() == 1) {
mp[abs(*S.begin()-x)]++;
S.insert(x);
return;
}
set<int>::iterator it = S.lower_bound(x);
set<int>::iterator en = it;
advance(en, -1);
if(it == S.end()) {
mp[x-*en]++;
//cout << "T1 " << x << " " << en << '\n';
} else if(it == S.begin()) {
mp[*it-x]++;
//cout << "T2 " << x << " " << it << '\n';
} else {
mp[*it-*en]--;
mp[x-*en]++;
mp[*it-x]++;
//cout << "T3 " << x << " " << it << " " << en << '\n';
}
S.insert(x);
}
int main() {
string a;
int x;
while(in >> a) {
if(a == "I") {
in >> x;
if(S.find(x) == S.end())
ins(x);
}
if(a == "S") {
in >> x;
if(S.find(x) != S.end()) {
rem(x);
} else {
out << "-1" << '\n';
}
}
if(a == "C") {
in >> x;
if(S.find(x) != S.end()) {
out << "1" << '\n';
} else {
out << "0" << '\n';
}
}
if(a == "MAX") {
if(S.size() < 2) {
out << "-1" << '\n';
} else {
set<int>::iterator it = S.end();
advance(it, -1);
out << *it-*S.begin() << '\n';
}
}
if(a == "MIN") {
while(mp.size() != 0 && mp.begin()->second == 0)
mp.erase(mp.begin());
if(mp.size() == 0) {
out << "-1" << '\n';
} else {
out << mp.begin()->first << '\n';
}
}
}
return 0;
}