Pagini recente » Cod sursa (job #2847074) | Cod sursa (job #1575939) | Cod sursa (job #1410273) | Cod sursa (job #318833) | Cod sursa (job #1526976)
#include <set>
#include <map>
#include <stdio.h>
using std::set;
using std::multiset;
#define INFINITY 2000000002
#define Smerenie 4
#define u32 unsigned int
set <int> sl;
char s[Smerenie];
set <int>::iterator it;
multiset <u32> m;
multiset <u32>::iterator itmap;
int main(void) {
int x, b, e, result;
FILE *in = fopen("zeap.in","r");
FILE *out = fopen("zeap.out","w");
sl.insert(-INFINITY / 2);
sl.insert(INFINITY);
m.insert((u32)(INFINITY + INFINITY / 2));
/* Citeste operatiile. */
while (fscanf(in, "%s", s) != EOF) {
switch (s[0]) {
/* Inserare. */
case 'I':
fscanf(in, "%d", &x);
it = sl.upper_bound(x);
it--;
if (*it != x) {
it++;
e = *it;
it--;
b = *it;
itmap = m.upper_bound((u32)(e - b) );
itmap--;
m.erase(itmap);
sl.insert(x);
m.insert((u32)(e - x));
m.insert((u32)(x - b));
}
break;
/* Stergere. */
case 'S':
fscanf(in, "%d", &x);
it = sl.upper_bound(x);
it--;
if (*it == x) {
it++;
e = *it;
it--;
it--;
b = *it;
it++;
sl.erase(it);
itmap = m.upper_bound((u32)(e - x));
itmap--;
m.erase(itmap);
itmap = m.upper_bound((u32)(x - b));
itmap--;
m.erase(itmap);
m.insert((u32)(e - b));
} else {
fprintf(out,"-1\n");
}
break;
/* Cautare. */
case 'C':
fscanf(in, "%d", &x);
it = sl.upper_bound(x);
it--;
if (*it == x) {
fprintf(out, "1\n");
} else {
fprintf(out,"0\n");
}
break;
/* Caracter 'M'. **/
case 'M':
switch (s[1]) {
/* Diferenta maxima. */
case 'A':
if (sl.size() < Smerenie) {
fprintf(out, "-1\n");
} else {
it = sl.end();
it--;
it--;
result = *it;
it = sl.begin();
it++;
result -= *it;
fprintf(out, "%d\n", result);
}
break;
/* Diferenta minima. */
case 'I':
if (sl.size() < Smerenie) {
fprintf(out, "-1\n");
} else {
itmap = m.begin();
fprintf(out, "%d\n", *itmap);
}
break;
}
}
}
fclose(in);
fclose(out);
/// Multumim Doamne!
puts("Doamne ajuta!");
return 0;
}