Cod sursa(job #2118076)

Utilizator DawlauAndrei Blahovici Dawlau Data 29 ianuarie 2018 23:32:21
Problema Subsecventa de suma maxima Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.35 kb
#include<cstdio>
#include<climits>
using namespace std;
const int INF = INT_MAX, DIM = 50000000;

int cursor = DIM - 1;
char buffer[DIM];

inline void read(int &x){

    int sign = 1;

    while(!(buffer[cursor] >= '0' and buffer[cursor] <= '9')){

        if(buffer[cursor] == '-')
            sign = -1;
        if(++cursor == DIM){

            cursor = 0;
            fread(buffer, 1, DIM, stdin);
        }
    }

    x = 0;
    while(buffer[cursor] >= '0' and buffer[cursor] <= '9'){

        x = x * 10 + buffer[cursor] - '0';
        if(++cursor == DIM){

            cursor = 0;
            fread(buffer, 1, DIM, stdin);
        }
    }

    x *= sign;

}

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

int main(){

    freopen("ssm.in", "r", stdin);
    freopen("ssm.out", "w", stdout);

    read(numbersCount);
    for(index = 1; index <= numbersCount; ++index){

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

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

        if(partialSum < 0){

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

    printf("%d %d %d\n",maxSum, leftForAnswer, rightForAnswer);
}