Pagini recente » Cod sursa (job #1920258) | Cod sursa (job #1494872) | Cod sursa (job #2960394) | Cod sursa (job #186224) | Cod sursa (job #1457153)
#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;
while(isdigit(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;
while((c = getchar()) != -1) {
switch(c) {
case 'M':
if(getchar() == 'A') printf("%d\n", getMax());
else printf("%d\n", getMin());
getchar(); getchar();
break;
case 'I':
Insert(getint());
break;
case 'S':
Erase(getint());
break;
case 'C':
printf("%d\n", Find(getint()));
}
}
return 0;
}