Pagini recente » Cod sursa (job #409821) | Cod sursa (job #190220) | Cod sursa (job #2679627) | Borderou de evaluare (job #1567720) | Cod sursa (job #137)
Cod sursa(job #137)
#include <cstdio>
#include <set>
using namespace std;
const int BMAX = 16;
multiset <int> S, Min;
inline int ABS(int x) { return x < 0 ? -x : x; }
inline int toint(char s[]) {
int rez = 0, i;
for (i = 0; isdigit(s[i]); ++i)
rez = rez * 10 + s[i] - '0';
return rez;
}
inline void sterg(multiset <int> :: iterator it) {
int a, b;
a = *it;
if (++it != S.end()) {
b = *it;
Min.erase( Min.find( ABS(a - b) ) );
}
}
inline void leaga(multiset <int> :: iterator it) {
int a, b;
a = *it;
if (++it != S.end()) {
b = *it;
Min.insert( ABS(a - b) );
}
}
int main() {
FILE *fin = fopen("zeap.in", "rt");
FILE *fout = fopen("zeap.out", "wt");
char buf[BMAX];
multiset <int> :: iterator it;
int aux;
while (fgets(buf, BMAX, fin))
switch (buf[0]) {
case 'I':
aux = toint(buf + 2);
if (S.find(aux) == S.end()) {
it = S.lower_bound(aux);
if (it != S.end() && it != S.begin())
sterg(--it);
it = S.insert(aux);
leaga(it);
if (it != S.begin())
leaga(--it);
}
break;
case 'S':
aux = toint(buf + 2);
if ((it = S.find(aux)) != S.end()) {
sterg(it);
if (it != S.begin())
sterg(--it),
++it;
S.erase(it);
if (S.size() >= 2) {
it = S.lower_bound(aux);
if (it != S.begin())
leaga(--it);
}
} else
fprintf(fout, "-1\n");
break;
case 'C':
aux = toint(buf + 2);
if (S.find(aux) != S.end())
fprintf(fout, "1\n");
else
fprintf(fout, "0\n");
break;
case 'M':
if (S.size() < 2)
fprintf(fout, "-1\n");
else if (buf[1] == 'A')
fprintf(fout, "%d\n", *S.rbegin() - *S.begin());
else
fprintf(fout, "%d\n", *Min.begin());
break;
}
fclose(fin);
fclose(fout);
return 0;
}