Pagini recente » Cod sursa (job #544093) | Cod sursa (job #1931314) | Cod sursa (job #932384) | Cod sursa (job #2078002) | Cod sursa (job #1489620)
#include <cstdio>
#include <set>
using namespace std;
set<int> unSet;
multiset<int> dif;
void insereaza(int val) {
set<int>::iterator it = unSet.find(val);
if (it == unSet.end()) {
unSet.insert(val);
set<int>::iterator it = unSet.find(val);
if (it != unSet.begin()) {
set<int>::iterator anterior = it;
--anterior;
dif.insert(*it - *anterior);
}
set<int>::iterator succesor = it;
++succesor;
if (succesor != unSet.end())
dif.insert(*succesor - *it);
if (it != unSet.begin() && it != unSet.end()) {
set<int>::iterator anterior = it;
--anterior;
set<int>::iterator succesor = it;
++succesor;
dif.erase(*succesor - *anterior);
}
}
}
int sterge(int val) {
set<int>::iterator it = unSet.find(val);
if (it == unSet.end())
return -1;
else {
if (it != unSet.begin()) {
set<int>::iterator anterior = it;
--anterior;
dif.erase(dif.find(*it - *anterior));
}
set<int>::iterator succesor = it;
++succesor;
if (succesor != unSet.end())
dif.erase(dif.find(*succesor - *it));
if (it != unSet.begin() && it != unSet.end()) {
set<int>::iterator anterior = it;
--anterior;
set<int>::iterator succesor = it;
++succesor;
dif.insert(*succesor - *anterior);
}
unSet.erase(it);
return 0; // de ignorat
}
}
int cauta(int val) {
set<int>::iterator it = unSet.find(val);
if (it == unSet.end())
return 0;
else
return 1;
}
int max_dif() {
if (unSet.size() < 2)
return -1;
else {
int primul = *unSet.begin();
int ultimul = *unSet.rbegin();
return ultimul - primul;
}
}
int min_dif() {
if (unSet.size() < 2)
return -1;
else
return *dif.begin();
}
void dump() {
set<int>::iterator it;
printf("unSet: ");
for (it = unSet.begin(); it != unSet.end(); ++it)
printf("%d ", *it);
multiset<int>::iterator mit;
printf("\ndif: ");
for (mit = dif.begin(); mit != dif.end(); ++mit)
printf("%d ", *mit);
printf("\n");
}
int main() {
freopen("zeap.in", "r", stdin);
freopen("zeap.out", "w", stdout);
char ch;
int val;
while (scanf("%c", &ch) == 1) {
if (ch == 'I') {
scanf("%d\n", &val);
insereaza(val);
} else if (ch == 'S') {
scanf("%d\n", &val);
if (sterge(val) == -1)
printf("-1\n");
} else if (ch == 'C') {
scanf("%d\n", &val);
printf("%d\n", cauta(val));
} else if (ch == 'M') {
scanf("%c", &ch);
if (ch == 'A')
printf("%d\n", max_dif());
else // if (ch == 'I')
printf("%d\n", min_dif());
scanf("%c\n", &ch);
}
//dump();
}
return 0;
}