Cod sursa(job #2811800)

Utilizator andrei_C1Andrei Chertes andrei_C1 Data 3 decembrie 2021 09:04:13
Problema Subsecventa de suma maxima Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.19 kb
#include <stdio.h>

FILE *fin, *fout;

const int INF = 1e9;
const int BUFSIZE = 1 << 16;

int rpos; 
char rbuf[BUFSIZE];

static inline int isspace(char ch) {
    return ch <= ' ';
}

static inline int isdigit(char ch) {
    return '0' <= ch && ch <= '9';
}

void initRead() {
	rpos = BUFSIZE - 1;
	for(int i = 0; i < BUFSIZE; i++) {
		rbuf[i] = 0;
	}
}

static inline char readChar(FILE *fin) {
    if(!(rpos = (rpos + 1) & (BUFSIZE - 1)))
        fread(rbuf, 1, BUFSIZE, fin);
    return rbuf[rpos];
}

int readInt(FILE *fin) {
    int ch, ret = 0, semn = 1;

    while(!isdigit(ch = readChar(fin))) {
    	if(ch == '-') {
    		semn = -1;
    	}
    }

    do {
        ret = 10 * ret + ch - '0';
    } while(isdigit(ch = readChar(fin)));

    return ret * semn;
}


int n, sum, sum_max = -INF, left = 1, right, idx;

int main() {
	fin = fopen("ssm.in", "r"); initRead();
	fout = fopen("ssm.out", "w");

	n = readInt(fin);
	for(int i = 1; i <= n; i++) {
		int val;
		val = readInt(fin);

		if(sum < 0) {
			sum = 0;
			idx = i;
		}
		sum += val;

		if(sum > sum_max) {
			sum_max = sum;
			left = idx;
			right = i;
		}
	}

	fprintf(fout, "%d %d %d\n", sum_max, left, right);

	fclose(fin);
	fclose(fout);
	return 0;
}