Cod sursa(job #3238165)

Utilizator Alex21Ungureanu Alexandru Alex21 Data 23 iulie 2024 07:48:51
Problema Subsecventa de suma maxima Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.93 kb
#include <fstream>
#include <climits>
using namespace std;

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

#define N 6000005

int sir[N] = {0};
int sp[N] = {0};

int main() {
    int n;
    fin >> n;

    for (int i = 1; i <= n; i++) {
        fin >> sir[i];
        sp[i] = sp[i - 1] + sir[i];
    }

    int smax = INT_MIN;
    int st = 1;
    int dr = 1;
    int j = 1;

    for (int i = 1; i <= n; i++) {
        if (i == n) {
            while (j <= i) {
                if (sp[i] - sp[j - 1] > smax) {
                    st = j;
                    dr = i; 
                }

                j++;
            }
        }
        else if (sp[i] > sp[dr]) {
            dr = i;
            while (j <= i) {
                if(sp[j - 1] < sp[st - 1]) {
                    st = j;
                }

                j++;
            }

            smax = sp[dr] - sp[st - 1];
        }
    }

    fout << smax << '\n' << st << ' ' << dr;
}