Pagini recente » Cod sursa (job #2435680) | Cod sursa (job #1904902) | Cod sursa (job #1586435) | Cod sursa (job #568749) | Cod sursa (job #2618976)
#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;
}