Cod sursa(job #1292376)

Utilizator OwlreeRobert Badea Owlree Data 14 decembrie 2014 11:37:21
Problema Subsecventa de suma maxima Scor 80
Compilator cpp Status done
Runda Arhiva educationala Marime 0.78 kb
#include <bits/stdc++.h>

using namespace std;

int main() {

  ifstream in("ssm.in");
  ofstream out("ssm.out");

  int N;
  in >> N;

  vector <int> v(N + 1, 0);

  for (int i = 1; i <= N; ++i) {
    in >> v[i];
  }

  vector <int> s = v;

  for (int i = 1; i <= N; ++i) {
    s[i] = s[i] + s[i - 1];
  }

  vector <int> d(N + 1, 0);
  int mn = 0;

  for (int i = 1; i <= N; ++i) {

    d[i] = s[i] - mn;

    mn = min(mn, s[i]);
  }

  int mx = - (1 << 30);
  int mx_pos = N + 1;

  for (int i = N; i > 0; --i) {
    if (d[i] >= mx) {
      mx = d[i];
      mx_pos = i;
    }
  }

  vector <int> res;

  int start = mx_pos - 1;

  while (s[mx_pos] - s[start] != mx) {
    --start;
  } 

  out << d[mx_pos] << " " << start + 1 << " " << mx_pos << "\n";

  in.close();
  out.close();

  return 0;

}