Cod sursa(job #2503850)

Utilizator AndreeaGherghescuAndreea Gherghescu AndreeaGherghescu Data 3 decembrie 2019 20:47:42
Problema Subsecventa de suma maxima Scor 65
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.01 kb
#include <iostream>
#include <fstream>

using namespace std;

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

const int N=6000002;
long long s[N],d[N];
int v[N];

int main()
{
    int n;
    in>>n;
    for (int i=1;i<=n;i++)
        in>>v[i];
    d[1]=v[1];
    for (int i=2;i<=n;i++)
        if (d[i-1]+v[i]>v[i])
            d[i]=d[i-1]+v[i];
        else d[i]=v[i];
    s[n]=v[n];
    for (int i=n-1;i>0;i--)
        if (s[i+1]+v[i]>v[i])
            s[i]=s[i+1]+v[i];
        else s[i]=v[i];
    long long maxx=s[1]+d[1]-v[1],s1=d[1],s2=s[1];
    int ind=1;
    for (int i=2;i<=n;i++)
        if (s[i]+d[i]-v[i]>maxx)
        {
            maxx=s[i]+d[i]-v[i];
            ind=i;
            s1=d[i];
            s2=s[i];
        }
    out<<maxx<<' ';
    int inc=ind,sf=ind;
    while (s1)
    {
        s1-=v[inc];
        inc--;
    }
    inc++;
    out<<inc<<' ';
    while (s2)
    {
        s2-=v[sf];
        sf++;
    }
    sf--;
    out<<sf;
    return 0;
}