Cod sursa(job #3182641)

Utilizator radu1331Mocan Radu radu1331 Data 9 decembrie 2023 11:37:51
Problema Subsecventa de suma maxima Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.23 kb
#include <bits/stdc++.h>

#pragma GCC optimize("Ofast,unroll-loops")
#pragma GCC target("avx,avx2,fma")

using namespace std;

#define fastIO ios_base::sync_with_stdio(NULL);cin.tie(NULL)
#define testCases int tc;cin>>tc;while(tc--)
#define ll long long
#define ld long double
#define sza(x) ((int)x.size())
#define all(a) (a).begin(),(a).end()
#define PI 3.1415926535897932384626433832795l

const int NMAX = 6 * 1e6 + 5;
int best [ NMAX ];

template<typename T> inline T gcd(T a, T b) {return (b?__gcd(a, b):a);}
template<typename T> inline T lcm(T a, T b) {return (a*(b/gcd(a, b)));}

static inline void solve();

int main ( int argc, char** argv )
{

    // ( void )! freopen ( "ssm.in" , "r" , stdin );
    // ( void )! freopen ( "ssm.out" , "w" , stdout );

    fastIO;

    solve();

    return 0;
}

static inline void solve()
{
    int n; cin >> n;
    int start = 0, end = 0, maxim = -1e6 - 5;

    for ( int i = 1; i <= n; ++ i )
    {
        cin >> best [ i ];
        best [ i ] = max ( best [ i - 1 ] + best [ i ], best [ i ] );
        if ( best [ i - 1 ] < 0 ) start = i;
        if ( best [ i ] > maxim ) maxim = best [ i ], end = i;
    }
    cout << maxim << ' ' << start << ' ' << end;

}