Cod sursa(job #1991850)
| Utilizator | Data | 18 iunie 2017 15:36:34 | |
|---|---|---|---|
| Problema | Subsecventa de suma maxima | Scor | 100 |
| Compilator | cpp | Status | done |
| Runda | Arhiva educationala | Marime | 1.81 kb |
#include <fstream>
using namespace std;
ifstream fin ("ssm.in");
ofstream fout("ssm.out");
int v[6000001];
int main()
{
int n, dr=1, st=1, suma, maxim=(-1<<31)+1, ind_st, ind_dr;
fin>>n;
for (int i=1;i<=n;++i)
fin>>v[i];
while (v[dr]<0 && dr<=n)
{
st = dr;
suma=v[dr];
if (maxim<suma)
{
maxim=suma;
ind_dr=dr;
ind_st=st;
}
++dr;
}
if (dr<=n)
{
st=dr;
suma=v[dr];
if (maxim<suma)
{
maxim=suma;
ind_dr=dr;
ind_st=st;
}
}
while (dr<n)
{
if (suma+v[dr+1]>0 && dr+1<=n)
{
dr++;
suma+=v[dr];
if (maxim<suma)
{
maxim=suma;
ind_dr=dr;
ind_st=st;
}
}
else
{
dr++;
st=dr;
suma=v[dr];
if (maxim<suma)
{
maxim=suma;
ind_dr=dr;
ind_st=st;
}
while (v[dr+1]<0 && dr+1<=n)
{
dr++;
st=dr;
suma=v[dr];
if (maxim<suma)
{
maxim=suma;
ind_dr=dr;
ind_st=st;
}
}
if (dr<n)
{
dr++;
st=dr;
suma=v[dr];
if (maxim<suma)
{
maxim=suma;
ind_dr=dr;
ind_st=st;
}
}
}
}
fout<<maxim<<" "<<ind_st<< " "<<ind_dr;
}
