Cod sursa(job #1770251)
Utilizator | Data | 3 octombrie 2016 22:30:08 | |
---|---|---|---|
Problema | Subsecventa de suma maxima | Scor | 65 |
Compilator | cpp | Status | done |
Runda | Arhiva educationala | Marime | 1.07 kb |
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("ssm.in");
ofstream fout("ssm.out");
int s[6000001];
int bst[6000001];
int l[6000001];
int main()
{
int n,i,max,min=999999999,c;
fin>>n;
for(i=1;i<=n;i++)
fin>>s[i];
bst[1]=s[1];
l[1]=1;
max=-999999999;
for(i=2;i<=n;i++)
{
if(bst[i-1]+s[i]>=s[i])
{
bst[i]=bst[i-1]+s[i];
l[i]=l[i-1];
}
else
{
bst[i]=s[i];
l[i]=i;
}
if(bst[i]>max)
max=bst[i];
}
fout<<max<<" ";
for(i=1;i<=n;i++)
{
if(bst[i]==max)
{
if(l[i]<min)
{
min=l[i];
c=i-l[i];
}
else
if(l[i]==min)
{
if(i-l[i]<c)
c=i-l[i];
}
}
}
for(i=1;i<=n;i++)
{
if(i-l[i]==c)
fout<<l[i]<<" "<<i;
}
return 0;
}