Untitled

 avatar
unknown
plain_text
7 days ago
972 B
0
Indexable
class Solution {
public:
    int check(int l, int r , vector <int> &a){
        if(l==r) return max(0,a[l]);
        if(l>r) return 0;
        int mid = l + (r-l)/2;
        int left = check(l,mid,a);
        int right = check(mid+1,r,a);
        int ans = max(left,right);
        int pl = 1;
        int flag =0;
        int runl = 1;
        for(int i = mid; i>=l;i--){
            runl *= a[i];
            if(runl>pl) {runl = pl; flag = 1;}
            if(runl == 0) break;
        }

        int pr = 1;
        int runr = 1;
        for(int i=mid+1;i<=r;i++){
            runr *= a[i];
            if(runr > pr) {runr = pr; flag = 1;}
            if(runr == 0) break;
        }
        int middle = pr*pl;
        if(middle == 1 && flag == 0) middle = 0;
        return max(middle , ans);
    }

    int maxProduct(vector<int>& a) {
        int n = a.size();
        int ans = check(0,n-1,a);
        return ans==0 ? *max_element(a.begin(),a.end()) : ans;

    }
};
Leave a Comment