Pagini recente » Cod sursa (job #3157758) | Cod sursa (job #1190333) | Cod sursa (job #1875095) | Cod sursa (job #3137996) | Cod sursa (job #634220)
Cod sursa(job #634220)
#include<fstream>
const int Nmax = 6000000;
using namespace std;
ifstream fin("ssm.in");
ofstream fout("ssm.out");
int indice_inceput,indice_sfarsit;
int x[Nmax],suma;
int lungime;
int n;
void Sol()
{
int i;
fin>>n;
indice_inceput = indice_sfarsit = 1;
fin>>x[1];
suma = x[1];
int suma_partiala = x[1];
int ind_inceput = 1;
for( i=2;i<=n;++i)
{
/*Dacă există mai mult subsecvenţe candidate la soluţie, atunci se va tipări cea cu
indicele de început cel mai mic, iar în caz de egalitate cea mai scurtă.*/
fin>>x[i];
if( suma_partiala +x[i] >= x[i] && x[i] >0 )
{
suma_partiala = suma_partiala + x[i];
}
else
if( suma_partiala +x[i] >= x[i] && x[i] < 0 )
{
if(suma_partiala > suma)
{
indice_inceput = ind_inceput;
indice_sfarsit = i-1;
suma = suma_partiala;
}
suma_partiala = suma_partiala + x[i];
}
else
if( suma_partiala +x[i] >= x[i] && x[i] == 0 )
{
if(suma_partiala > suma)
{
indice_inceput = ind_inceput;
indice_sfarsit = i-1;
suma = suma_partiala;
}
}
else
{
if(suma_partiala > suma)
{
indice_inceput = ind_inceput;
indice_sfarsit = i-1;
suma = suma_partiala;
}
ind_inceput = i;
suma_partiala = x[i];
}
}
if(suma_partiala > suma)
{
indice_inceput = ind_inceput;
indice_sfarsit = i-1;
suma = suma_partiala;
}
fout<<suma<<" "<<indice_inceput<<" "<<indice_sfarsit<<"\n";
}
int main()
{
Sol();
fout.close();
fin.close();
return 0;
}