Pagini recente » Cod sursa (job #948421) | Cod sursa (job #937582) | Cod sursa (job #1942766) | Cod sursa (job #706747) | Cod sursa (job #596074)
Cod sursa(job #596074)
# include <cstdio>
# include <cstring>
# include <set>
using namespace std;
const char *FIN = "zeap.in", *FOU = "zeap.out";
set <int> S;
multiset <int> MS;
char sir[20];
inline int cit (void) {
int x = 0;
for (char *p = sir + 2; *p >= '0' && *p <= '9'; ++p)
x = x * 10 + *p - '0';
return x;
}
inline bool check (const char *X) {
for (int i = 0, j = strlen (X); i < j; ++i) {
if (sir[i] != X[i]) {
return 0 ;
}
}
return 1 ;
}
inline int min (int a, int b) {
return (a < b ? a : b);
}
inline void insert (int val) {
if (S.count (val) > 0) return ;
if (S.empty ()) {
S.insert (val);
return ;
}
set <int> :: iterator it, it2;
if ((it = S.upper_bound (val)) != S.begin ()) {
it2 = it, --it2;
if (*it > val) {
multiset <int> :: iterator ms = MS.find (*it - *it2);
if (ms != MS.end ())
MS.erase (ms);
MS.insert (min (*it - val, val - *it2));
} else MS.insert (val - *it2);
} else if (*it > val)
MS.insert (*it - val);
S.insert (val);
}
inline void sterge (int val) {
if (S.count (val) == 0) {
printf ("-1\n");
return ;
}
set <int> :: iterator it, it2, it3;
if ((it = S.lower_bound (val)) != S.begin ()) {
it3 = it, --it3;
multiset <int> :: iterator ms = MS.find (val - *it3);
if (ms != MS.end ())
MS.erase (ms);
if ((it2 = S.upper_bound (val)) != S.end ()) {
ms = MS.find (*it2 - val);
if (ms != MS.end ())
MS.erase (ms);
MS.insert (*it2 - *it3);
}
}
S.erase (it);
}
inline void cauta (int val) {
printf ("%d\n", S.count (val) > 0);
}
inline void mindif (void) {
if (S.size () < 2) {
printf ("-1\n");
return ;
}
printf ("%d\n", *MS.begin ());
}
inline void maxdif (void) {
if (S.size () < 2) {
printf ("-1\n");
return ;
}
set <int> :: iterator it = S.end ();
printf ("%d\n", *--it - *S.begin ());
}
int main (void) {
freopen (FIN, "r", stdin);
freopen (FOU, "w", stdout);
for ( ; fgets (sir, 20, stdin); ) {
if (check ("I")) {
insert (cit ());
} else if (check ("S")) {
sterge (cit ());
} else if (check ("C")) {
cauta (cit ());
} else if (check ("MIN")) {
mindif ();
} else if (check ("MAX")) {
maxdif ();
}
}
}