Pagini recente » Cod sursa (job #88988) | Cod sursa (job #2371525) | Cod sursa (job #341367) | Cod sursa (job #684463) | Cod sursa (job #2897403)
#pragma GCC optimize("O3")
#include <bits/stdc++.h>
using namespace std;
const int fake = 0x31313131;
struct Zeap {
set<int> elems;
multiset<int> diffs;
int Sterge(int x) {
if(elems.find(x) == elems.end()) return -1;
auto it = elems.lower_bound(x);
if(it != elems.begin() && it != prev(elems.end())) {
auto prex = *(--it); ++it;
auto postx = *(++it); --it;
diffs.insert(postx - prex);
}
if(it != elems.begin()) {
auto prex = *(--it); ++it;
diffs.erase(diffs.lower_bound(x - prex));
}
if(it != prev(elems.end())) {
auto postx = *(++it); --it;
diffs.erase(diffs.lower_bound(postx - x));
}
elems.erase(x);
return fake;
}
int Insereaza(int x) {
if(elems.find(x) != elems.end()) return fake;
elems.insert(x);
auto it = elems.lower_bound(x);
if(it != elems.begin() && it != prev(elems.end())) {
auto prex = *(--it); ++it;
auto postx = *(++it); --it;
diffs.erase(diffs.lower_bound(postx - prex));
}
if(it != elems.begin()) {
auto prex = *(--it); ++it;
diffs.insert(x - prex);
}
if(it != prev(elems.end())) {
auto postx = *(++it); --it;
diffs.erase(postx - x);
}
return fake;
}
int Cauta(int x) {
return elems.find(x) != elems.end();
}
int Max() {
if(elems.size() < 2) return -1;
auto itl = elems.end(); --itl;
auto itr = elems.begin();
return *itl - *itr;
}
int Min() {
if(elems.size() < 2) return -1;
return *diffs.begin();
}
};
ifstream in("zeap.in");
ofstream out("zeap.out");
#define cin in
#define cout out
int main() {
Zeap z;
char t;
while(cin >> t) {
int ans = fake;
if(t == 'I') {
int num; cin >> num;
ans = z.Insereaza(num);
}
if(t == 'S') {
int num; cin >> num;
ans = z.Sterge(num);
}
if(t == 'C') {
int num; cin >> num;
ans = z.Cauta(num);
}
if(t == 'M') {
cin >> t >> t;
if(t == 'X') {
ans = z.Max();
}
else {
ans = z.Min();
}
}
if(ans != fake) cout << ans << '\n';
}
return 0;
}