Cod sursa(job #3326363)

Utilizator cmqtCosmin Rasadeanu cmqt Data 28 noiembrie 2025 13:35:07
Problema Subsecventa de suma maxima Scor 90
Compilator c-64 Status done
Runda Arhiva educationala Marime 0.79 kb
#include <stdio.h>
#include <stdlib.h>
#define max(a,b) ({ __typeof__ (a) _a = (a); __typeof__ (b) _b = (b); _a > _b ? _a : _b; })

int main() {
	FILE* f = fopen("ssm.in", "r");
	FILE* fo = fopen("ssm.out", "w");
	int n;
	int* v;
	int dp;
	int left, right;
	int best_left = 0;
	int best_right = 0;
	int max = 0;
	fscanf(f, "%d\n", &n);
	v = malloc(sizeof(int) * n);
	for (int i = 0; i < n; i++) {
		fscanf(f, "%d ", &v[i]);
	}
	max = v[0];
	dp = v[0];
	left = 0;
	right = 0;
	for (int i = 1; i < n; i++) {
		if (dp == 0) {
			left = i;
			right = i;
		} else {
			right++;
		}
		dp = max(0, dp + v[i]);
		if (max < dp && dp > 0) {
			max = dp;
			best_left = left;
			best_right = right;
		}
	}
	fprintf(fo, "%d %d %d", max, best_left + 1, best_right + 1);
	fclose(f);
	fclose(fo);
	free(v);
	return 0;
}