Cod sursa(job #2981631)

Utilizator adelina_15InfoAdelina Radoi adelina_15Info Data 18 februarie 2023 13:11:02
Problema Subsecventa de suma maxima Scor 95
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.67 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <climits>

using namespace std;

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

int n;

vector<int>sp;

int main()
{
    sp.push_back(0);
    fin >> n;
    for(int i = 1; i <= n; i++)
    {
        int x;
        fin >> x;
        sp.push_back(sp[i-1]+x);
    }
    int minim = INT_MAX, maxim = INT_MIN;
    int ind1 = 0, ind2 = 0;
    int minim2 = INT_MAX, maxim2 = INT_MIN;
    int ind3 = 0, ind4 = 0;
    for(int i = 0; i <= n; i++)
    {
        if(sp[i] > maxim)
        {
            maxim = sp[i];
            ind2 = i;
        }
        if(sp[i] < minim)
        {
            minim = sp[i];
            ind1 = i;
        }
    }
    for(int i = 0; i < ind2; i++)
    {
        if(sp[i] < minim2)
        {
            minim2 = sp[i];
            ind3 = i;
        }
    }
    for(int i = ind1+1; i <= n; i++)
    {
        if(sp[i] > maxim2)
        {
            maxim2 = sp[i];
            ind4 = i;
        }
    }
    int s1 = maxim2-minim;
    int s2 = maxim-minim2;
    if(s1 > s2)
    {
        fout << s1 << " " << ind1+1 << " " << ind4;
    }
    else if(s1 < s2)
    {
        fout << s2 << " " << ind3+1 << " " << ind2;
    }
    else
    {
        if(ind1 < ind3)
            fout << s1 << " " << ind1+1 << " " << ind4;
        else if(ind1 > ind3)
            fout << s2 << " " << ind3+1 << " " << ind2;
        else
        {
            if(ind4-ind1 < ind2-ind3)
                fout << s1 << " " << ind1+1 << " " << ind4;
            else
                fout << s2 << " " << ind3+1 << " " << ind2;
        }
    }
    return 0;
}