Cod sursa(job #2451317)

Utilizator ShayTeodor Matei Shay Data 26 august 2019 15:12:23
Problema Subsecventa de suma maxima Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.27 kb
#include <bits/stdc++.h>

const int BUFFER_SIZE = 1 << 17;

char buffer[BUFFER_SIZE];
int pos = BUFFER_SIZE;

inline char next() {
    if (pos == BUFFER_SIZE) {
        fread(buffer, 1, BUFFER_SIZE, stdin);
        pos = 0;
    }

    return buffer[pos++];
}

inline int read() {
    int x = 0, neg = 1;
    char c = next();
    if (c == '-') {
    	neg = -1;
    }

    while (!('0' <= c && c <= '9')) {
        c = next();
    }

    while ('0' <= c && c <= '9') {
        x = (x << 3) + (x << 1) + (c - '0');
        c = next();
    }

    return x * neg;
}

inline void print(int n) {
	char snum[65];
	int i = 0, semn = 1;

	if (n < 0) {
		semn = -1;
	}

	do {
		snum[i++] = (semn * n) % 10 + '0';
		n /= 10;
	} while (n);

	--i;

	if (semn == -1) {
		putchar('-');
	}

	while (i >= 0) {
		putchar(snum[i--]);
	}

	putchar(' ');
}

int main() {
	freopen("ssm.in", "r", stdin);
	freopen("ssm.out", "w", stdout);
	int n;
	n = read();

	int dp, init_pos, starting_pos, last_pos, sum = 0, max_sum = INT_MIN;
	for (int i = 0 ; i < n ; ++i) {
		dp = read();
		if (sum >= 0) {
			sum += dp;
		} else {
			sum = dp;
			init_pos = i;
		}

		if (max_sum < sum) {
			max_sum = sum;
			starting_pos = init_pos;
			last_pos = i;
		}
	}

	print(max_sum), print(starting_pos + 1), print(last_pos + 1);
	return 0;
}