Problem link (Click Here)
#include <iostream>
#include <cstdio>
#include<cstdlib>
#include <string>
#include <cstring>
#include <algorithm>
#include <climits>
#include <vector>
using namespace std;
int arry[1000000];
int maxoverlap(int f, int m, int l){
int m1= INT_MIN;
int s=0;
for(int i=m; i>=f; i--){
s+=arry[i];
m1 = max(m1, s);
}
int m2= INT_MIN;
s=0;
for(int i=m+1; i<=l; i++){
s+=arry[i];
m2 = max(m2, s);
}
return m1+m2;
}
int maxsum(int f, int l){
if(f==l) return arry[f];
int lmax;
int rmax;
int over;
if(f<l){
int m = (f+l)/2;
lmax = maxsum(f,m);
rmax = maxsum(m+1,l);
over = maxoverlap(f,m,l);
}
return max(max(lmax,rmax),over);
}
int main()
{
int t;
cin>> t;
while(t--){
int n;
cin>>n;
for(int i=0;i<n;i++){
cin>>arry[i];
}
int maxs = maxsum(0, n-1);
int a=0;
for(int i=0;i<n;i++){
if(arry[i]>=0){
a+=arry[i];
}
}
cout << maxs <<" "<< a << endl;
}
return 0;
}
No comments:
Post a Comment