Pagini recente » Cod sursa (job #42677) | Cod sursa (job #186857) | Cod sursa (job #3180556) | Cod sursa (job #2192269) | Cod sursa (job #2898917)
#include <fstream>
#include <unordered_map>
#include <vector>
#include <set>
#include <cmath>
using namespace std;
ifstream fin("zeap.in");
ofstream fout("zeap.out");
set<long long> zeap, dif;
unordered_map<long long, long long> map;
set<long long > :: iterator crt, pred, succ, final;
int main() {
string op;
long long x, i = 0;
while (fin >> op) {
if (op == "I") {
fin >> x;
if (zeap.find(x) != zeap.end())
continue;
else {
zeap.insert(x);
i++;
}
if (zeap.size() >= 2) {
crt = zeap.find(x);
pred = crt;
succ = crt;
pred--;
succ++;
final = zeap.end();
final--;
if (crt != zeap.begin() && crt != final) {
dif.insert(abs(*crt - *pred));
dif.insert(abs(*succ - *crt));
map[abs(*crt - *pred)]++;
map[abs(*succ - *crt)]++;
if (map[abs(*succ - *pred)] == 1) {
dif.erase(abs(*succ - *pred));
map[abs(*succ - *pred)] = 0;
} else
map[abs(*succ - *pred)]--;
} else if (crt != zeap.begin()) {
dif.insert(abs(*crt - *pred));
map[abs(*crt - *pred)]++;
} else if (crt != final) {
dif.insert(abs(*crt - *succ));
map[abs(*crt - *succ)];
}
}
} else if (op == "C") {
fin >> x;
if (zeap.find(x) != zeap.end())
fout << 1 << "\n";
else fout << 0 << "\n";
} else if (op == "S") {
fin >> x;
if (zeap.find(x) == zeap.end())
fout << -1 << "\n";
else {
crt = zeap.find(x);
pred = crt;
succ = crt;
pred--;
succ++;
final = zeap.end();
final--;
if (crt != zeap.begin() && crt != final) {
if (map[abs(*crt - *pred)] == 1) {
dif.erase(abs(*crt - *pred));
map[abs(*crt - *pred)] = 0;
} else map[abs(*crt - *pred)]--;
if (map[abs(*crt - *succ)] == 1) {
dif.erase(abs(*crt - *succ));
map[abs(*crt - *succ)] = 0;
} else map[abs(*crt - *succ)]--;
dif.insert(abs(*succ - *pred));
map[abs(*succ - *pred)]++;
} else if (crt != zeap.begin()) {
if (map[abs(*crt - *pred)] == 1) {
dif.erase(abs(*crt - *pred));
map[abs(*crt - *pred)] = 0;
} else map[abs(*crt - *pred)]--;
} else if (crt != final) {
if (map[abs(*crt - *succ)] == 1) {
dif.erase(abs(*crt - *succ));
map[abs(*crt - *succ)] = 0;
} else map[abs(*crt - *succ)]--;
}
zeap.erase(x);
}
} else if (op == "MAX") {
if (zeap.size() < 2)
fout << -1 << "\n";
else {
fout << abs(*(--zeap.end()) - *zeap.begin()) << "\n";
}
} else if (op == "MIN") {
if (zeap.size() < 2)
fout << -1 << "\n";
else fout << *dif.begin() << "\n";
}
}
fin.close();
fout.close();
}