Cod sursa(job #1489273)

Utilizator usermeBogdan Cretu userme Data 20 septembrie 2015 21:28:04
Problema Zeap Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 3.18 kb
#include <cstdio>
#include <set>

using namespace std;

FILE* f = fopen("zeap.in", "r");
FILE* h = fopen("zeap.out", "w");

set<int> Z;
multiset<int> minZ;

int main() {
    char s[4];
    while(fscanf(f, "%s", &s) != EOF) {
        if(s[0] == 'I') {
            int x;
            fscanf(f, "%d", &x);
            if(Z.find(x) == Z.end()) {
                Z.insert(x);
                set<int>::iterator it;
                set<int>::iterator itt;
                it = Z.find(x);
                if(it != Z.begin()) {
                    itt = it;
                    --itt;
                    minZ.insert(*it - *itt);
                }
                itt = it;
                ++itt;
                if(itt != Z.end()) {
                    minZ.insert(*itt - *it);
                }
            }
        } else {
            if(s[0] == 'S') {
                int x;
                fscanf(f, "%d", &x);
                set<int>::iterator it;
                set<int>::iterator itt;
                it = Z.find(x);
                if(it == Z.end()) {
                    fprintf(h, "-1\n");
                } else {
                    if(it != Z.begin()) {
                        itt = it;
                        --itt;
                        minZ.erase(minZ.find(*it - *itt));
                        set<int>::iterator itt2;
                        itt = it;
                        itt2 = it;
                        --itt;
                        ++itt2;
                        if(itt2 != Z.end()) {
                            minZ.insert(*itt2 - *itt);
                        }
                    }
                    itt = it;
                    ++itt;
                    if(itt != Z.end()) {
                        minZ.erase(minZ.find(*itt - *it));
                    }
                    Z.erase(it);
                }
            } else {
                if(s[0] == 'C') {
                    int x;
                    fscanf(f, "%d", &x);
                    set<int>::iterator it;
                    it = Z.find(x);
                    if(it == Z.end()) {
                        fprintf(h, "0\n");
                    } else {
                        fprintf(h, "1\n");
                    }
                } else {
                    if(s[1] == 'A') {
                        if(Z.size() < 2) {
                            fprintf(h, "-1\n");
                        } else {
                            set<int>::iterator itt;
                            set<int>::iterator itt2;
                            itt = Z.begin();
                            itt2 = Z.end();
                            --itt2;
                            fprintf(h, "%d\n", *itt2 - *itt);
                        }
                    } else {
                        if(Z.size() < 2) {
                            fprintf(h, "-1\n");
                        } else {
                            multiset<int>::iterator itt;
                            itt = minZ.begin();
                            fprintf(h, "%d\n", *itt);
                        }
                    }
                }
            }
        }
    }
    return 0;
}