Pagini recente » Cod sursa (job #2401657) | Cod sursa (job #2057890) | Cod sursa (job #1496593) | Cod sursa (job #2029898) | Cod sursa (job #221817)
Cod sursa(job #221817)
#include <set>
#include <cstdio>
using namespace std;
set <int> v;
multiset <int> x;
set <int>::iterator it, it1, it2;
int n, i, j, m, nr;
char c;
void zeap_insert(int nr) {
int d, dif1, dif2, nr1, nr2, d1, d2;
pair <int, int> p1, p2;
if (v.size() == 0) {
v.insert(nr);
return;
}
it2 = v.lower_bound(nr);
if (*it2 == nr)
return;
it1 = it2;
if (it1 != v.begin())
--it1;
if (it2 != v.end()) {
dif2 = abs(*it2 - nr);
// printf("BAG %d\n", dif2);
x.insert(dif2);
}
if (it1 != it2) {
dif1 = abs(*it1 - nr);
// printf("BAG %d\n", dif1);
x.insert(dif1);
}
v.insert(nr);
}
int zeap_delete(int nr) {
int d;
it = v.find(nr);
if (it == v.end())
return -1;
it1 = it;
if (it1 != v.begin())
--it1;
it2 = it; it2++;
if (it2 != v.end()) {
x.erase(x.find(*it2 - nr));
// printf("SCOT %d\n", *it2 - nr);
}
if (it1 != it) {
x.erase(x.find(nr - *it1));
// printf("SCOT %d\n", nr - *it1);
}
if (it2 != v.end() && it1 != it) {
x.insert(*it2 - *it1);
// printf("BAG %d\n", *it2 - *it1);
}
v.erase(it);
return 0;
}
int zeap_search(int nr) {
if (v.find(nr) == v.end())
return 0;
else
return 1;
}
int zeap_max() {
if (v.size() < 2)
return -1;
it = v.end(); --it;
return (*it - (*v.begin()));
}
int zeap_min() {
if (v.size() < 2)
return -1;
return (*x.begin());
}
int main() {
freopen("zeap.in", "r", stdin);
freopen("zeap.out", "w", stdout);
while (!feof(stdin)) {
scanf("%c", &c);
if (c == 'I') {
scanf("%d ", &nr);
zeap_insert(nr);
}
if (c == 'S') {
scanf("%d ", &nr);
if (zeap_delete(nr) == -1)
printf("-1\n");
}
if (c == 'C') {
scanf("%d ", &nr);
printf("%d\n", zeap_search(nr));
}
if (c == 'M') {
scanf("%c%c ", &c, &c);
if (c == 'X')
printf("%d\n", zeap_max());
else
printf("%d\n", zeap_min());
}
}
return 0;
}