Pagini recente » Cod sursa (job #3241751) | Cod sursa (job #820701)
Cod sursa(job #820701)
#include<fstream>
#define Nmax 6000005
using namespace std;
ifstream f("ssm.in"); ofstream g("ssm.out");
long long inf;
int N,st,dr,Smax,a[Nmax];
void gsm(int,int,int &,int &,int &);
int main()
{ inf=1000000000; inf=-inf*inf;
f>>N;
for (int i = 1; i <= N; i++) f>>a[i];
gsm(1,N,Smax,st,dr);
g<<Smax<<' '<<st<<' '<<dr<<'\n';
return 0;
}
void gsm(int s, int d, int &sum, int &pi,int &pf) {
if (s == d) {sum=a[s]; pi=pf=s; return ;}
int mid = (s + d) / 2;
int sum1=0,sum2=0,pi1,pf1,pi2,pf2,pi3,pf3;
gsm(s, mid,sum1,pi1,pf1);
gsm(mid + 1, d,sum2,pi2,pf2);
long long suf = 0,pre = 0;
long long maxSuf =inf,maxPre =inf;
for (int i = mid; i >= s; i--) {
suf += a[i];
if (maxSuf < suf)
{maxSuf = suf;
pi3=i;
}
}
for (int i = mid + 1; i <= d; i++) {
pre += a[i];
if (maxPre < pre)
{maxPre = pre;
pf3=i;
}
}
int sum3=maxPre+maxSuf;
if(sum1>sum2) sum=sum1,pi=pi1,pf=pf1;
else sum=sum2,pi=pi2,pf=pf2;
if(sum3>sum) sum=sum3,pi=pi3,pf=pf3;
}