Pagini recente » Cod sursa (job #2211736) | Cod sursa (job #1301893) | Cod sursa (job #111104) | Cod sursa (job #1691612) | Cod sursa (job #221825)
Cod sursa(job #221825)
#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[20];
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);
x.insert(dif2);
}
if (it1 != it2) {
dif1 = abs(*it1 - nr);
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));
}
if (it1 != it) {
x.erase(x.find(nr - *it1));
}
if (it2 != v.end() && it1 != it) {
x.insert(*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());
}
void baloteaza() {
int i;
nr = 0;
for (i = 2; c[i] != 0; i++)
nr = nr * 10 + (c[i] - 48);
}
int main() {
freopen("zeap.in", "r", stdin);
freopen("zeap.out", "w", stdout);
while (gets(c)) {
if (c[0] == 'I') {
baloteaza();
zeap_insert(nr);
}
if (c[0] == 'S') {
baloteaza();
if (zeap_delete(nr) == -1)
printf("-1\n");
}
if (c[0] == 'C') {
baloteaza();
printf("%d\n", zeap_search(nr));
}
if (c[0] == 'M') {
if (c[2] == 'X')
printf("%d\n", zeap_max());
else
printf("%d\n", zeap_min());
}
}
return 0;
}