Tuesday, July 26, 2016

The Maximum Subarray

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