Cod sursa(job #2703936)

Utilizator pielevladutPiele Vladut Stefan pielevladut Data 9 februarie 2021 15:57:08
Problema Subsecventa de suma maxima Scor 60
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.79 kb
#include <bits/stdc++.h>

using namespace std;

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

/*
char s[100100];
int v[100100], i, k;
int evaluare();
int paranteza_rotunda();
int paranteza_dreapta();
int secventa_suma_maxima();
*/
int n;
int v[600606];
int maxim, ans;
int st, dr, elem;
void secventa_suma_maxima(int v[100100], int k)
{
    for(int i = 1; i <= k; i ++)
    {
        ans = ans + v[i];
        if(ans > maxim)
        {
            maxim = ans;
            dr = i;
            elem = st;
        }
        if(ans < 0)
        {
            ans = 0;
            st = i+1;
        }
    }
}
/*
int evaluare()
{
    int suma = termen();
    while(s[i] != NULL)
    {
        if(s[i] != ',')
        {
            if(s[i] == '(')
            {
                i++;
                suma += paranteza_rotunda();
            }
            else if(s[i] == '[')
            {
                i++;
                suma += paranteza_dreapta();
            }
        }
    }
}

int paranteza_rotunda()
{
    if(k)
    {
        return secventa_
    }
    k = 0;
    int rezultat = 0;
    int numar = 0;
    while(s[i] != ')')
    {
        while(isdigit(s[i]))
        {
            numar = numar * 10 + s[i] - '0';
            i++;
        }
        v[++k] = numar;
        if(s[i] == ',')
            continue;
        if(s[i] == '(')
        {
            i++;
            rezultat = rezultat + paranteza_rotunda();
            i++;
        }
    }
    return rezultat;
}
*/
int main()
{
    fin >> n;
    for(int i = 1; i <= n; i ++)
    {
        fin >> v[i];
    }
    maxim = INT_MIN;
    st = 1;
    dr = 1;
    secventa_suma_maxima(v, n);
    fout << maxim << ' ' << elem << ' ' << dr << '\n';
    return 0;
}