Pagini recente » Cod sursa (job #671943) | Cod sursa (job #760428) | Cod sursa (job #3000879) | Cod sursa (job #572914) | Cod sursa (job #539097)
Cod sursa(job #539097)
#include<fstream>
using namespace std;
#define NMAX 6000001
//FILE *in,*out;
int n,S[NMAX],i;
int main()
{
ifstream in("ssm.in");
ofstream out("ssm.out");
in>>n;
for(i=1;i<=n;i++)
in>>S[i];
in.close();
// In rezolvarea de mai jos, S[i] retine suma tuturor valorile intre pozitiile 1 .. i
// best[i] = Max(S[i] - S[j]) cu j < i =>
// best[i] = S[i] - Min(S[j]) cu j < i
int bestsum= -(1<<30);
int min=0,idx,begin,end;
for(i=1;i<=n;i++)
{
S[i]+=S[i-1];
if(bestsum<S[i]-min)
{
bestsum=S[i]-min;
begin=idx+1;
end=i;
}
if(min>S[i])
{
min=S[i];
idx=i;
}
}
out<<bestsum<<' '<<begin<<' '<<end;
return 0;
}