Pagini recente » Cod sursa (job #236553) | Cod sursa (job #1341408) | Cod sursa (job #2322327) | Cod sursa (job #1553405) | Cod sursa (job #2898886)
#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;
string op;
long long x, i = 0;
int main() {
while (fin >> op) {
if (op == "I") {
fin >> x;
if (zeap.find(x) != zeap.end())
continue;
else {
zeap.insert(x);
i++;
}
if (zeap.size() >= 2) {
auto crt = zeap.find(x);
auto pred = crt;
auto succ = crt;
pred--;
succ++;
auto 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 {
auto crt = zeap.find(x);
auto pred = crt;
auto succ = crt;
pred--;
succ++;
auto 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);
}
}
}
}