Cod sursa(job #2942896)

Utilizator RolandPetreanPetrean Roland RolandPetrean Data 20 noiembrie 2022 12:01:24
Problema Subsecventa de suma maxima Scor 90
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.65 kb
// https://www.infoarena.ro/problema/ssm
#include <bits/stdc++.h>
using namespace std;
#define endl '\n'

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

int main() {
  int n;
  fin>>n;

  pair<int, pair<int,int>> maxi{};
  vector<int> dp(n), left(n);
  fin>>dp[0];
  for (int i=1; i<n; ++i) {
    fin>>dp[i];
    if (dp[i-1]+dp[i]>dp[i]) {
      dp[i] += dp[i-1];
      left[i] = left[i-1];
    } else left[i] = i;

    if (dp[i]>maxi.first || (dp[i] == maxi.first && (left[i]<maxi.second.first || (left[i] == maxi.second.first && i<maxi.second.second)))) maxi = {dp[i], {left[i], i}};
  }

  fout<<maxi.first<<" "<<maxi.second.first+1<<" "<<maxi.second.second+1;
}