#include<stdio.h>
int maxSubarrayProduct(int a[], int start, int size)
{
int i;
int neg_index;
int count=0;
int max_prod_ending_here=1;
int max_prod_so_far=0;
int temp;
for(i=start;i<size;i++)
{
max_prod_ending_here= max_prod_ending_here * a[i];
if(max_prod_ending_here > max_prod_so_far)
max_prod_so_far=max_prod_ending_here;
if(max_prod_ending_here<0 && count==0)
{
count++;
neg_index=i;
}
if(max_prod_ending_here <0 && count > 0)
{
temp=(max_prod_ending_here)/(a[neg_index]);
if(temp > max_prod_so_far)
max_prod_so_far=temp;
}
}
return max_prod_so_far;
}
int max( int a, int b)
{
if(a>b)
return a;
else
return b;
}
int main()
{
int arr[] = {6, -3, 0, -10, 3, -60, -40, 2};
int bef_zero=0;
int aft_zero=0;
int bef_num_neg=0;
int aft_num_neg=0;
int i;
int count=0;
int max_prod=1;
int max_prod_a=1;
int max_prod_b=1;
int index_zero;
int n = sizeof(arr)/sizeof(arr[0]);
for(i=0;i<n;i++)
{
bef_zero++;
if(arr[i]<0)
bef_num_neg++;
if(arr[i]==0)
{
index_zero=i;
break;
}
count++;
}
aft_zero=n-bef_zero-1;
for(i=index_zero+1;i<n;i++)
{
if(arr[i]<0)
aft_num_neg++;
}
if(count==n && ((bef_num_neg+aft_num_neg)%2 == 0)) // CASE 1: No zero and even num of negatives
{
for(i=0;i<n;i++)
max_prod=max_prod * arr[i];
printf("Max Sub array Product is %d", max_prod
); }
if(count==n && ((bef_num_neg+aft_num_neg)%2 == 1)) // CASE 2: No zero and odd num of negatives
printf("Maximum Sub array product is %d", maxSubarrayProduct
(arr
, 0, n
)); if(count < n) // CASE 3: Zero
{
if((bef_num_neg)%2==0)
{
for(i=0; i<=(index_zero)-1; i++)
max_prod_b=max_prod_b*arr[i];
}
if((bef_num_neg)%2==1)
{
max_prod_b = maxSubarrayProduct(arr, 0, n);
}
if((aft_num_neg)%2==0)
{
for(i=(index_zero)+1; i<n; i++)
{
max_prod_a=max_prod_a*arr[i];
}
}
if((aft_num_neg)%2==1)
{
max_prod_a = maxSubarrayProduct(arr, index_zero+1, n);
}
max_prod = max(max_prod_a, max_prod_b);
}
printf("Max Sub array Produtc is %d", max_prod
); return 0;
}
I2luY2x1ZGU8c3RkaW8uaD4KCmludCBtYXhTdWJhcnJheVByb2R1Y3QoaW50IGFbXSwgaW50IHN0YXJ0LCBpbnQgc2l6ZSkKewogICAgaW50IGk7CiAgICBpbnQgbmVnX2luZGV4OwogICAgaW50IGNvdW50PTA7CiAgICBpbnQgbWF4X3Byb2RfZW5kaW5nX2hlcmU9MTsKICAgIGludCBtYXhfcHJvZF9zb19mYXI9MDsKICAgIGludCB0ZW1wOwogICAgZm9yKGk9c3RhcnQ7aTxzaXplO2krKykKICAgIHsKICAgICAgICAgICAgICAgICAgICAgICBtYXhfcHJvZF9lbmRpbmdfaGVyZT0gbWF4X3Byb2RfZW5kaW5nX2hlcmUgKiBhW2ldOwogICAgICAgICAgICAgICAgICAgICAgIGlmKG1heF9wcm9kX2VuZGluZ19oZXJlID4gbWF4X3Byb2Rfc29fZmFyKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhfcHJvZF9zb19mYXI9bWF4X3Byb2RfZW5kaW5nX2hlcmU7CiAgICAgICAgICAgICAgICAgICAgICAgaWYobWF4X3Byb2RfZW5kaW5nX2hlcmU8MCAmJiBjb3VudD09MCkKICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudCsrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmVnX2luZGV4PWk7CiAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgIGlmKG1heF9wcm9kX2VuZGluZ19oZXJlIDwwICYmIGNvdW50ID4gMCkKICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wPShtYXhfcHJvZF9lbmRpbmdfaGVyZSkvKGFbbmVnX2luZGV4XSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZih0ZW1wID4gbWF4X3Byb2Rfc29fZmFyKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhfcHJvZF9zb19mYXI9dGVtcDsKICAgICAgICAgICAgICAgICAgICAgICB9CiAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgCiAgICByZXR1cm4gbWF4X3Byb2Rfc29fZmFyOwp9CgppbnQgbWF4KCBpbnQgYSwgaW50IGIpCnsKICAgIGlmKGE+YikKICAgICAgICAgICByZXR1cm4gYTsKICAgIGVsc2UKICAgICAgICByZXR1cm4gYjsKfQoKaW50IG1haW4oKQp7CiAgICBpbnQgYXJyW10gPSB7NiwgLTMsIDAsIC0xMCwgMywgLTYwLCAtNDAsIDJ9OwogICAgaW50IGJlZl96ZXJvPTA7CiAgICBpbnQgYWZ0X3plcm89MDsKICAgIGludCBiZWZfbnVtX25lZz0wOwogICAgaW50IGFmdF9udW1fbmVnPTA7CiAgICBpbnQgaTsKICAgIGludCBjb3VudD0wOwogICAgaW50IG1heF9wcm9kPTE7CiAgICBpbnQgbWF4X3Byb2RfYT0xOwogICAgaW50IG1heF9wcm9kX2I9MTsKICAgIGludCBpbmRleF96ZXJvOwogICAgCiAgICBpbnQgbiA9IHNpemVvZihhcnIpL3NpemVvZihhcnJbMF0pOwogICAgZm9yKGk9MDtpPG47aSsrKQogICAgeyAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgIGJlZl96ZXJvKys7CiAgICAgICAgICAgICAgICAgICAgaWYoYXJyW2ldPDApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZl9udW1fbmVnKys7CiAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgaWYoYXJyW2ldPT0wKQogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4X3plcm89aTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBjb3VudCsrOwogICAgfQogICAgYWZ0X3plcm89bi1iZWZfemVyby0xOwogICAgZm9yKGk9aW5kZXhfemVybysxO2k8bjtpKyspCiAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKGFycltpXTwwKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWZ0X251bV9uZWcrKzsKICAgIH0KICAgIGlmKGNvdW50PT1uICYmICgoYmVmX251bV9uZWcrYWZ0X251bV9uZWcpJTIgPT0gMCkpICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ0FTRSAxOiBObyB6ZXJvIGFuZCBldmVuIG51bSBvZiBuZWdhdGl2ZXMgICAgICAgICAgIAogICAgewogICAgICAgICAgICAgICAgZm9yKGk9MDtpPG47aSsrKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heF9wcm9kPW1heF9wcm9kICogYXJyW2ldOwogICAgICAgICAgICAgICAgcHJpbnRmKCJNYXggU3ViIGFycmF5IFByb2R1Y3QgaXMgJWQiLCBtYXhfcHJvZCk7CiAgICB9CiAgICBpZihjb3VudD09biAmJiAoKGJlZl9udW1fbmVnK2FmdF9udW1fbmVnKSUyID09IDEpKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBDQVNFIDI6IE5vIHplcm8gYW5kIG9kZCBudW0gb2YgbmVnYXRpdmVzCiAgICAgICAgICAgICAgICBwcmludGYoIk1heGltdW0gU3ViIGFycmF5IHByb2R1Y3QgaXMgJWQiLCBtYXhTdWJhcnJheVByb2R1Y3QoYXJyLCAwLCBuKSk7CiAgICBpZihjb3VudCA8IG4pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBDQVNFIDM6IFplcm8gCiAgICB7CiAgICAgICAgICAgICBpZigoYmVmX251bV9uZWcpJTI9PTApCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yKGk9MDsgaTw9KGluZGV4X3plcm8pLTE7IGkrKykKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhfcHJvZF9iPW1heF9wcm9kX2IqYXJyW2ldOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYoKGJlZl9udW1fbmVnKSUyPT0xKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heF9wcm9kX2IgPSBtYXhTdWJhcnJheVByb2R1Y3QoYXJyLCAwLCBuKTsKICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICBpZigoYWZ0X251bV9uZWcpJTI9PTApCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yKGk9KGluZGV4X3plcm8pKzE7IGk8bjsgaSsrKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhfcHJvZF9hPW1heF9wcm9kX2EqYXJyW2ldOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICAgICAgaWYoKGFmdF9udW1fbmVnKSUyPT0xKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heF9wcm9kX2EgPSBtYXhTdWJhcnJheVByb2R1Y3QoYXJyLCBpbmRleF96ZXJvKzEsIG4pOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgbWF4X3Byb2QgPSBtYXgobWF4X3Byb2RfYSwgbWF4X3Byb2RfYik7CiAgICB9ICAgIAogICAgcHJpbnRmKCJNYXggU3ViIGFycmF5IFByb2R1dGMgaXMgJWQiLCBtYXhfcHJvZCk7CiAgICBnZXRjaGFyKCk7CiAgICByZXR1cm4gMDsKfQo=