Cod sursa(job #2038871)

Utilizator danny794Dan Danaila danny794 Data 14 octombrie 2017 05:05:06
Problema Subsecventa de suma maxima Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 0.96 kb
#include <fstream>

#define NMAX 600005

std::ifstream cin("ssm.in");
std::ofstream cout("ssm.out");

struct SSM {
  SSM(int n) : start_(0), stop_(0), n_(n), max_(0) {}

  void read() {
    for (int i = 0; i < n_; i++) {
      cin >> sums_[i];
      mins_[i] = i;
    }
    max_ = sums_[0];
    start_ = 0;
    stop_ = 0;
  }

  void build() {
    for (int i = 1; i < n_; i++) {
      sums_[i] += sums_[i - 1];
      if (sums_[mins_[i]] > sums_[mins_[i - 1]]) {
        mins_[i] = mins_[i - 1];
      }
      if (sums_[i] - sums_[mins_[i - 1]] > max_) {
        start_ = mins_[i - 1];
        stop_ = i;
        max_ = sums_[i] - sums_[mins_[i - 1]];
      }
    }
  }

  void printSolution() {
    cout << max_ << " " << start_ + 2 << " " << stop_ + 1;
  }

 private:
  int sums_[NMAX];
  int mins_[NMAX];
  int start_, stop_, n_, max_;
};

int main() {
  int n;
  cin >> n;
  SSM ssm(n);
  ssm.read();
  ssm.build();
  ssm.printSolution();
  cin.close();
  cout.close();
  return 0;
}