Pagini recente » Cod sursa (job #2706658) | Cod sursa (job #2703399) | Cod sursa (job #285912) | Cod sursa (job #1008469) | Cod sursa (job #2269831)
#include <iostream>
#include <fstream>
using namespace std;
int *v;
struct secv{
int sum, ind1,ind2;
};
secv maxi(secv a, secv b){
if(a.sum<b.sum) return b;
return a;
}
secv divide(int l,int r){
int m = (l+r)/2;
secv r1,r2;
if(l==r){
secv x;
x.sum = v[l];
x.ind1 = l;
x.ind2 = r;
return x;
}
r1 = divide(l,m);
r2 = divide(m+1,r);
int s=0;
secv sl,sr;
sl.sum = 0;
sl.ind1 = l;
sl.ind2 = m;
sr.sum = 0;
sr.ind1 = m+1;
sr.ind2 = r;
for(int i = m;i>=l;i--){
s+=v[i];
if(s<sl.sum){
sl.ind1++;
}else{
sl.sum = s;
}
}
s = 0;
for(int i = m+1;i<=r;i++){
s+=v[i];
if(s<sr.sum){
sr.ind2--;
}else{
sr.sum = s;
}
}
secv r3;
r3.sum = sl.sum + sr.sum;
r3.ind1 = sl.ind1;
r3.ind2 = sr.ind2;
return maxi(maxi(r1,r2),r3);
}
int main()
{
ifstream fin("ssm.in");
ofstream fout("ssm.out");
int n;
fin>>n;
v = new int[n+1];
for(int i=1;i<=n;i++) fin>>v[i];
secv rez = divide(1,n);
fout<<rez.sum<<" "<<rez.ind1<<" "<<rez.ind2+1;
return 0;
}