Cod sursa(job #2794260)

Utilizator vladutzu_finutzuVlad Cacenschi vladutzu_finutzu Data 4 noiembrie 2021 16:14:58
Problema Subsecventa de suma maxima Scor 65
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.01 kb
#include <fstream>
using namespace std;
ifstream cin("ssm.in");
ofstream cout("ssm.out");
const int NMAX=6000005;
int n, v[NMAX];
int get_sum(int L, int R, int &i, int &j)
{
    if(L == R)
    {
        i = L;
        j = L;
        return v[L];
    }
    int p1, p2;
    int mid = (L + R) / 2, max_l=0, max_r=0;
    int sol=0;
    sol = get_sum(L, mid, i, j);
    int sum = get_sum(mid+1, R, p1, p2);
    if(sol < sum)
        sol = sum, i = p1, j = p2;
    
    sum = 0;
    for(int st = mid; st >= L; st--)
    {
        sum += v[st];
        if(max_l < sum)
            max_l = sum, p1 = st;
    }
    
    sum = 0;
    for(int dr=mid+1; dr <= R; dr++)
    {
        sum += v[dr];
        if(max_r < sum)
            max_r = sum, p2 = dr;
    }
    if(sol < max_l + max_r)
        sol = max_l + max_r, i=p1, j=p2;
    
    return sol;
}
int main(int argc, const char * argv[]) {
    cin>>n;
    for(int i=1; i<=n; i++)
        cin>>v[i];
    int i, j, sum = get_sum(1, n, i, j);
    cout<<sum<<" "<<i<<" "<<j;
    return 0;
}