Cod sursa(job #2444583)

Utilizator ShayTeodor Matei Shay Data 31 iulie 2019 19:22:26
Problema Subsecventa de suma maxima Scor 75
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.91 kb
#include <bits/stdc++.h>

inline int read() {
	int n = 0;
	bool neg = false;
	char c = getchar_unlocked();
	if (c == '-') {
		neg = true;
	}
	while (!('0' <= c && c <= '9')) {
		c = getchar_unlocked();
	}

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

	if (neg) {
		return n *= -1;
	}

	return n;
}

int main() {
	freopen("ssm.in", "r", stdin);
	freopen("ssm.out", "w", stdout);
	int n;
	n = read();
	
	std::vector<int> v(n), start(n), dp(n);
	
	for (int i = 0 ; i < n ; ++i) {
		v[i] = read();
	}

	dp[0] = v[0];
	start[0] = 0;

	for (int i = 1 ; i < n ; ++i) {
		if (dp[i - 1] >= 0) {
			dp[i] = dp[i - 1] + v[i];
			start[i] = start[i - 1];
		} else {
			dp[i] = v[i];
			start[i] = i;
		}
	}

	auto res = std::max_element(dp.begin(), dp.end());
	int distance = std::distance(dp.begin(), res);
	printf("%d %d %d\n", *res, start[distance] + 1, distance + 1);

	return 0;
}