Cod sursa(job #2717565)

Utilizator Maria23Dutu Maria Maria23 Data 7 martie 2021 16:51:40
Problema Subsecventa de suma maxima Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.05 kb
// 80 puncte
// probabil gresesc asta:
// Dacă există mai mult subsecvenţe candidate la soluţie,
// atunci se va tipări cea cu indicele de început cel mai mic, iar în caz de
// egalitate cea mai scurtă.

#include <fstream>
#include <iostream>

using namespace std;

int main() {
  ifstream fin("ssm.in");
  ofstream fout("ssm.out");

  long long n;
  fin >> n;
  long long x, sumaMax = -(1LL << 35), sumaCurenta = 0;
  pair<int, int> celMaiBunIndiceDeInceputSiLungime;
  int indiceDeInceput;
  for (long long i = 1; i <= n; i++) {
    fin >> x;
    if (sumaCurenta + x >= x) {
      sumaCurenta += x;
    } else {
      sumaCurenta = x;
      indiceDeInceput = i;
    }
    if (sumaCurenta > sumaMax) {
      sumaMax = sumaCurenta;
      celMaiBunIndiceDeInceputSiLungime = {indiceDeInceput,
                                           i - indiceDeInceput + 1};
    }
  }
  fout << sumaMax << " " << celMaiBunIndiceDeInceputSiLungime.first << " "
       << celMaiBunIndiceDeInceputSiLungime.first +
              celMaiBunIndiceDeInceputSiLungime.second - 1;
  return 0;
}