Cod sursa(job #3340279)

Utilizator Cristian_NegoitaCristian Negoita Cristian_Negoita Data 13 februarie 2026 15:31:11
Problema Subsecventa de suma maxima Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.36 kb
#include <bits/stdc++.h>
using namespace std;
ifstream fin("ssm.in");
ofstream fout("ssm.out");
const int NMAX = 6e6 + 1;
int n, arr[NMAX];

int kadane(int &st, int &dr)
{
    st = 1, dr = 1;
    int best_sum = INT_MIN, sum_crt = 0, best_st = -1, best_dr = -1;
    bool all_negative = true;
    for(int i = 1; i <= n; i++)
        all_negative &= (arr[i] < 0);
    if(all_negative)
    {
        st = dr = max_element(arr + 1, arr + n + 1) - arr;
        return *max_element(arr + 1, arr + n + 1);
    }
    for(int i = 1; i <= n; i++)
    {
        if(sum_crt + arr[i] < 0)
        {
            sum_crt = 0;
            st = i + 1, dr = i;
        }
        else
        {
            sum_crt += arr[i];
            dr++;
        }
        if(sum_crt > best_sum)
        {
            best_sum = sum_crt;
            best_st = st, best_dr = dr;
        }
        else if(sum_crt == best_sum)
        {
            if(st < best_st || dr - st + 1 < best_dr - best_st + 1)
            {
                best_st = st;
                best_dr = dr;
            }
        }
    }
    st = best_st, dr = best_dr;
    return best_sum;
}

int main()
{
    fin >> n;
    for(int i = 1; i <= n; i++)
        fin >> arr[i];
    int st, dr;
    fout << kadane(st, dr) << " " << st << " " << dr;

    fin.close();
    fout.close();
    return 0;
}