Cod sursa(job #1939361)

Utilizator DruffbaumPopescu Vlad Druffbaum Data 25 martie 2017 17:49:53
Problema Subsecventa de suma maxima Scor 85
Compilator c Status done
Runda Arhiva educationala Marime 0.73 kb
#include <stdio.h>

#define MAXN 6000000
#define INF 2000000000

int s[MAXN], v[MAXN];

int max(int a, int b) {
  return a > b ? a : b;
}

int main(void) {
  int n, maxSum, beg, end, flag;
  FILE *f = fopen("ssm.in", "r");
  fscanf(f, "%d", &n);
  for (int i = 0; i < n; ++i) {
    fscanf(f, "%d", &v[i]);
  }
  fclose(f);
  maxSum = -INF;
  beg = end = 0;
  flag = 0;
  for (int i = 0; i < n; ++i) {
    s[i] = max(0, s[i - 1] + v[i]);
    if (flag < 0) {
      beg = i;
      flag = v[i];
    } else {
      flag += v[i];
    }
    if (maxSum < s[i]) {
      maxSum = s[i];
      end = i;
    }
  }
  f = fopen("ssm.out", "w");
  fprintf(f, "%d %d %d\n", maxSum, beg + 1, end + 1);
  fclose(f);
  return 0;
}