Cod sursa(job #3208377)

Utilizator AlexInfoIordachioaiei Alex AlexInfo Data 28 februarie 2024 15:18:32
Problema Subsecventa de suma maxima Scor 95
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.99 kb
#include <bits/stdc++.h>

using namespace std;

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

const int NMAX = 6e6+5;
const int INF = 0x3f3f3f3f;

int n, x, s[2], maxi=-INF, inds, indf;
pair<int, int> smin[2];

int main()
{
    in>>n;
    for (int i=1; i<=n; i++)
    {
        in>>x; //s[0] smin[0] -> sumele precedente (i-1)
        s[1]=s[0]+x;
        if (s[1]<smin[0].first)
            smin[1].first = s[1], smin[1].second = i;
        else smin[1].first = smin[0].first, smin[1].second = smin[0].second;
         //suma minima dintre sumele de la 1 la 2, 3, ..., i

        if (s[1]-smin[1].first>maxi) //o ia doar pe prima deci cu inds cel mai mic
            maxi = s[1]-smin[1].first, inds = smin[1].second+1, indf = i;
        if (s[1]-smin[1].first==maxi && i - (smin[1].second+1) +1 < indf-inds + 1) //lungime mai scurta
            inds = smin[1].second+1, indf = i;

        s[0] = s[1];
        smin[0] = smin[1];
    }
    out<<maxi<<' '<<inds<<' '<<indf;


}