Cod sursa(job #2618976)

Utilizator Razvan22Avatar Razvan22 Data 26 mai 2020 17:38:37
Problema Subsecventa de suma maxima Scor 30
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.99 kb
#include <iostream>
#include <fstream>

using namespace std;

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

struct Subsecventa{
      int lungime;
      int capatStanga;
      int capatDreapta;
      int sumaMaxima;
};

Subsecventa date[100005];
int numarElemente=0;

int nr_elem, elemente[100005], stanga, dreapta, sumMax=-1, minim=9999999;

int main()
{
    fin>>nr_elem;
    for(int i=1;i<=nr_elem;i++)
        fin>>elemente[i];
    for(int i=1;i<nr_elem;i++)
    {
        int suma=elemente[i];
        for(int j=i+1;j<=nr_elem;j++)
        {
            suma=suma+elemente[j];
            if(suma>=sumMax)
            {
                sumMax=suma;
                int lungime=j-i+1;
                date[++numarElemente].lungime=lungime;
                date[numarElemente].capatStanga=i;
                date[numarElemente].capatDreapta=j;
                date[numarElemente].sumaMaxima=sumMax;
            }
        }
    }
    ///Aflu lungimeaMaxima a unei subsecvente;
    int sumMaxima=-1;
    for(int i=1;i<=numarElemente;i++)
    {
        if(date[i].sumaMaxima>sumMaxima)
            sumMaxima=date[i].sumaMaxima;
    }
    int lungimeMinima=9999999;
    for(int i=1;i<=numarElemente;i++)
    {
        if(date[i].sumaMaxima==sumMaxima)
        {
            if(date[i].lungime<lungimeMinima)
                lungimeMinima=date[i].lungime;
        }
    }
    int indiceStanga=9999999;
    for(int i=1;i<=numarElemente;i++)
    {
        if(date[i].lungime==lungimeMinima && date[i].sumaMaxima==sumMax)
        {
            if(date[i].capatStanga<indiceStanga)
                indiceStanga=date[i].capatStanga;
        }
    }
    for(int i=1;i<=numarElemente;i++)
    {
        if(date[i].capatStanga==indiceStanga && date[i].lungime==lungimeMinima && date[i].sumaMaxima==sumMax)
        {
            fout<<date[i].sumaMaxima<<" "<<date[i].capatStanga<<" "<<date[i].capatDreapta;
            return 0;
        }
    }
    return 0;
}