Cod sursa(job #3187296)

Utilizator MateiAlex24Diamandi Matei MateiAlex24 Data 28 decembrie 2023 13:14:36
Problema Subsecventa de suma maxima Scor 35
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.58 kb
#include <iostream>
#include <fstream>

using namespace std;

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

int main()
{
    int v[600000], v_suma[600000], n, suma_max=-1, i_max=-1, j_max=-1;
    fin>>n;
    for (int i=0; i<n; i++){
        fin>>v[i];
        if (i==0)
            v_suma[i] = v[i];
        else
            v_suma[i] = v_suma[i-1] + v[i];
        if (v_suma[i] > suma_max){
            suma_max = v_suma[i];
            i_max = 0;
            j_max = i;
            //cout<<suma_max<<" "<<i_max<<" "<<j_max<<endl;
        } else if (v_suma[i] == suma_max){
            if (j_max > i){
                suma_max = v_suma[i];
                i_max=0;
                j_max=i;
            }
        }
    }
    
    for (int num=1; num<n-1; num++){
        for (int i=num+1; i<n; i++){
            if (v_suma[i]-v_suma[num-1] > suma_max){
                suma_max = v_suma[i]-v_suma[num-1];
                i_max = num;
                j_max = i;
                //cout<<suma_max<<" "<<i_max<<" "<<j_max<<endl;
            } else if (v_suma[i]-v_suma[num-1] == suma_max){
                if (i_max > num){
                    suma_max = v_suma[i]-v_suma[num-1];
                    i_max = num;
                    j_max = i;                    
                } else if (i_max == num){
                    if (j_max-i_max > i-num){
                        suma_max = v_suma[i]-v_suma[num-1];
                        i_max=num;
                        j_max=i;
                    }
                }
            }
        }
    }
    
    fout<<suma_max<<" "<<i_max+1<<" "<<j_max+1;

    return 0;
}