Cod sursa(job #2239537)

Utilizator SqueekDanielTodasca Daniel SqueekDaniel Data 11 septembrie 2018 01:18:36
Problema Zeap Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.52 kb
#include<bits/stdc++.h>

std::ifstream InFile("zeap.in");
std::ofstream OutFile("zeap.out");

char Buffer[50];
int nr;
int maxi,mini;

std::set<int> ElemSet;
std::set<int>::iterator FoundIt, SwapIt2, SwapIt1;
std::multiset<int> DiffSet;

int main()
{
    while(!InFile.eof()) {
        InFile.getline(Buffer, 50);
        int x = 0;

        if(Buffer[0]!='M') {
            int pos=0;
            while(!isdigit(Buffer[pos])) pos++;
            while(isdigit(Buffer[pos])) x = x*10 + (Buffer[pos]-'0'), pos++;
        }

        if(Buffer[0]=='I') {
            FoundIt = ElemSet.find(x);

            if(!(FoundIt!=ElemSet.end()) && ElemSet.size()) {
                if(x > *ElemSet.rbegin())
                    DiffSet.insert (x - *ElemSet.rbegin());
                else if(x < *ElemSet.begin())
                        DiffSet.insert(*ElemSet.begin() - x);
                else {
                        SwapIt1 = ElemSet.upper_bound(x);
                        SwapIt2 = SwapIt1; --SwapIt2;
                        DiffSet.erase(DiffSet.find(*SwapIt1 - *SwapIt2));
                        DiffSet.insert(nr - *SwapIt2);
                        DiffSet.insert(*SwapIt1 - nr);
                }
            }
            ElemSet.insert(x);
        } else
        if(Buffer[0]=='S') {
            FoundIt = ElemSet.find(x);
            if(FoundIt == ElemSet.end()) OutFile << -1 << '\n';
            else {
                ElemSet.erase(FoundIt);
                if(x >*ElemSet.rbegin()) DiffSet.erase (x - *ElemSet.rbegin());
                else if(x < *ElemSet.begin()) DiffSet.erase(*ElemSet.begin() - x);
                else {
                        SwapIt1 = ElemSet.upper_bound(x);
                        SwapIt2 = SwapIt1; --SwapIt2;
                        DiffSet.insert(*SwapIt1 - *SwapIt2);
                        DiffSet.erase(DiffSet.find(x - *SwapIt2));
                        DiffSet.erase(DiffSet.find(*SwapIt1 - x));
                    }
            }
            continue;
        } else
        if(Buffer[0]=='C') {
            FoundIt = ElemSet.find(x);
            OutFile << (FoundIt != ElemSet.end()) << '\n';
        }

        if(Buffer[0]=='M' && Buffer[1]=='A')
            if(ElemSet.size()<2) OutFile << -1 << '\n';
            else OutFile << *ElemSet.rbegin() - *ElemSet.begin() << '\n';
        if(Buffer[0]=='M' && Buffer[1]=='I')
            if(!DiffSet.size()) OutFile << -1 << '\n';
            else OutFile << *DiffSet.begin() << '\n';
    }

    return 0;
}