Pagini recente » Cod sursa (job #730582) | Cod sursa (job #1846370) | Cod sursa (job #360776) | Cod sursa (job #2467368) | Cod sursa (job #1457160)
#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);
}
var Erase(var val) {
auto it = Set.find(val);
if(it == Set.end()) return 0;
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);
return 1;
}
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() {
ifstream fin("zeap.in");
ofstream fout("zeap.out");
Set.insert(INF);
Set.insert(-INF);
char c;
string str;
var val;
while(fin>>str) {
if(str == "I") { fin>>val; Insert(val); }
if(str == "C") { fin>>val; fout<<Find(val)<<'\n'; }
if(str == "S") { fin>>val; if(!Erase(val)) fout<<"-1\n"; }
if(str == "MIN") { fout<<getMin()<<'\n'; }
if(str == "MAX") { fout<<getMax()<<'\n'; }
}
return 0;
}