Pagini recente » Cod sursa (job #2581961) | Cod sursa (job #3194306) | Cod sursa (job #801215) | Cod sursa (job #1527125)
#include <set>
#include <map>
#include <stdio.h>
using std::set;
using std::multiset;
#define INFINITY 1000000002
#define Smerenie 4
#define u32 unsigned int
set <int> sl;
char s[Smerenie];
set <int>::iterator it;
multiset <int> m;
multiset <int>::iterator itmap;
void afis() {
printf("Set-ul : ");
for (it = sl.begin(); it != sl.end(); it++) {
printf("%d, ",*it);
}
printf("\n");
}
void afismap() {
printf("Mapul : ");
for (itmap = m.begin(); itmap != m.end(); itmap++) {
printf("%u, ", *itmap);
}
printf("\n");
}
int ABS(int X) {return X>0?X:-X;}
int main(void) {
int x, b, e, result;
FILE *in = fopen("zeap.in","r");
FILE *out = fopen("zeap.out","w");
sl.insert(-INFINITY);
sl.insert(INFINITY);
m.insert(INFINITY*2);
/* Citeste operatiile. */
while (fscanf(in, "%s", s) != EOF) {
//printf("%c\n", s[0]);
//afis();
//afismap();
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(ABS(e - b));
itmap--;
m.erase(itmap);
sl.insert(x);
m.insert(ABS(e - x));
m.insert(ABS(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(ABS(e - x));
itmap--;
m.erase(itmap);
itmap = m.upper_bound(ABS(x - b));
itmap--;
m.erase(itmap);
m.insert(ABS(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;
}