Pagini recente » Cod sursa (job #781495) | Cod sursa (job #2649072) | Cod sursa (job #1755380) | Cod sursa (job #2667471) | Cod sursa (job #1457157)
#include<bits/stdc++.h>
using namespace std;
typedef int var;
char line[40];
set<var> Set;
multiset<var> Diffs;
#define INF 2e9
var getint() {
getchar();
var a = 0;
char c;
for(c = getchar(); !isdigit(c); c = getchar());
for(; isdigit(c); c = getchar())
a = a * 10 + c - '0';
return a;
}
void Insert(var val) {
auto p = Set.insert(val);
if(p.second == 0) return;
auto it = p.first;
auto succ = it, pred = it;
succ++, pred--;
if(*succ != INF && *pred != -INF)
Diffs.erase(*succ - *pred);
if(*succ != INF) Diffs.insert(*succ - *it);
if(*pred != -INF) Diffs.insert(*it - *pred);
}
void Erase(var val) {
auto it = Set.find(val);
if(it == Set.end()) {printf("-1\n"); return;}
auto succ = it, pred = it;
succ++, pred--;
if(*succ != INF && *pred != -INF)
Diffs.insert(*succ - *pred);
if(*succ != INF) Diffs.erase(*succ - *it);
if(*pred != -INF) Diffs.erase(*it - *pred);
}
var Find(var val) {
return (Set.find(val) != Set.end());
}
var getMax() {
if(Diffs.empty()) return -1;
auto it2 = Set.end();
it2--;it2--;
auto it1 = Set.begin();
it1++;
return (*(it2) - *(it1));
}
var getMin() {
if(Diffs.empty()) return -1;
return *Diffs.begin();
}
int main() {
freopen("zeap.in", "r", stdin);
freopen("zeap.out", "w", stdout);
Set.insert(INF);
Set.insert(-INF);
char c;
for(char c = getchar(); c != -1; c = getchar()) {
switch(c) {
case 'M':
if(getchar() == 'A') printf("%d\n", getMax());
else printf("%d\n", getMin());
break;
case 'I':
Insert(getint());
break;
case 'S':
Erase(getint());
break;
case 'C':
printf("%d\n", Find(getint()));
}
}
return 0;
}