Cod sursa(job #3363288)

Utilizator MateiTeiChelaru Matei MateiTei Data 15 august 2026 12:03:37
Problema Subsecventa de suma maxima Scor 90
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.53 kb
#include <fstream>
using namespace std;

long long s[6000005];

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

    int n = 0;
    fin >> n;

    s[0] = 0;

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

    for (int i = 1; i <= n; ++i) {
        s[i] = s[i - 1] + s[i];
    }

    int st = 0;
    int dr = 0;
    int cnt_loc = 0;

    for (int p = 1; p <= n; p++) {
        if (s[p] > s[dr]) {
            dr = p;
        }
    }

    for (int p = 0; p < dr; p++) {
        if (s[p] < s[st]) {
            st = p;
        }
    }

    for (int p = st; p <= dr; p++) {
        cnt_loc++;
    }

    int min = 0;
    int max = 0;
    int cnt_glb = 0;

    for (int p = dr + 1; p <= n; p++) {
        if (s[p] < s[min]) {
            min = p;
        }
    }

    for (int p = min; p <= n; p++) {
        if (s[p] > s[max]) {
            max = p;
        }
    }

    for (int p = min; p <= max; p++) {
        cnt_glb++;
    }

    if (s[dr] - s[st] > s[max] - s[min]) {
        fout << s[dr] - s[st] << " " << st + 1 << " " << dr;
    } else if (s[dr] - s[st] < s[max] - s[min]) {
        fout << s[max] - s[min] << " " << min + 1 << " " << max;
    }
    if (s[dr] - s[st] == s[max] - s[min]) {
        if (cnt_loc < cnt_glb) {
            fout << s[dr] - s[st] << " " << st + 1 << " " << dr;
        }
        else if (cnt_loc > cnt_glb) {
            fout << s[max] - s[min] << " " << min + 1 << " " << max;
        }
    }


    return 0;
}