Cod sursa(job #2198505)

Utilizator DawlauAndrei Blahovici Dawlau Data 24 aprilie 2018 16:00:57
Problema Subsecventa de suma maxima Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.66 kb
#include<fstream>
#include<climits>
using namespace std;
const int INF = INT_MAX;

class InParser{

    private:
        static const int buffSZ = (1 << 15);
        char buff[buffSZ];
        int buffPos;
        ifstream File;

        inline void _advance(){

            if(++buffPos == buffSZ){

                buffPos = 0;
                File.read(buff, buffSZ);
            }
        }

    public:
        InParser(const char *FileName){

            File.open(FileName);
            buffPos = buffSZ - 1;
        }
        inline InParser &operator >>(int &no){

            int sgn = 1;
            while(!isdigit(buff[buffPos])){

                if(buff[buffPos] == '-')
                    sgn = -1;
                _advance();
            }
            no = 0;
            while(isdigit(buff[buffPos])){

                no = no * 10 + buff[buffPos] - '0';
                _advance();
            }
            no *= sgn;

            return *this;
        }
};

int partialSum, leftIndex = 1, maxSum = -INF, index, number, numbersCount, leftForAnswer, rightForAnswer;

int main(){

    InParser fin("ssm.in");
    ofstream fout("ssm.out");

    fin >> numbersCount;
    for(index = 1; index <= numbersCount; ++index){

        fin >> number;
        partialSum += number;
        if(partialSum > maxSum){

            maxSum = partialSum;
            rightForAnswer = index;
            leftForAnswer = leftIndex;
        }

        if(partialSum < 0){

            partialSum = 0;
            leftIndex = index + 1;
        }
    }

    fout << maxSum << ' ' << leftForAnswer << ' ' << rightForAnswer;
}