Cod sursa(job #2438571)

Utilizator Horia14Horia Banciu Horia14 Data 12 iulie 2019 19:26:15
Problema Subsecventa de suma maxima Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.13 kb
#include<cstdio>
#include<cctype>
#define oo 0x7fffffff
#define BUF_SIZE 1 << 20

char buf[BUF_SIZE];
int pos = BUF_SIZE;

char getChar(FILE* fin) {
    if(pos == BUF_SIZE) {
        fread(buf,1,BUF_SIZE,fin);
        pos = 0;
    }
    return buf[pos++];
}

int readInt(FILE* fin) {
    int res = 0;
    int semn = 1;
    char ch;
    do {
        ch = getChar(fin);
        if(ch == '-')
            semn = -semn;
    }while(!isdigit(ch));
    do {
        res = 10*res + ch - '0';
        ch = getChar(fin);
    }while(isdigit(ch));
    return res*semn;
}

int main() {
    int n, x, bestSum, sum, start, b, e, i;
    FILE* fin, *fout;
    fin = fopen("ssm.in","r");
    fout = fopen("ssm.out","w");
    n = readInt(fin);
    b = e = start = 1;
    bestSum = -oo;
    sum = 0;
    for(i = 1; i <= n; i++) {
        x = readInt(fin);
        //printf("%d ",x);
        if(sum < 0) {
            sum = x;
            start = i;
        } else sum += x;
        if(sum > bestSum) {
            bestSum = sum;
            b = start;
            e = i;
        }
    }
    fprintf(fout,"%d %d %d\n",bestSum,b,e);
    fclose(fin);
    fclose(fout);
    return 0;
}