File tree 1 file changed +31
-0
lines changed
1 file changed +31
-0
lines changed Original file line number Diff line number Diff line change
1
+ class Solution {
2
+ public int maxSumMinProduct (int [] nums ) {
3
+ Stack <long []> stack = new Stack <>(); // index, value
4
+ long [] pre = new long [nums .length ];
5
+ pre [0 ] = nums [0 ];
6
+ long res = 0 , mod = (int ) 1e9 + 7 ;
7
+ for (int i = 1 ; i < nums .length ; i ++) {
8
+ pre [i ] = pre [i - 1 ] + nums [i ];
9
+ }
10
+ for (int i = 0 ; i < nums .length ; i ++) {
11
+ int idx = i ;
12
+ while (stack .size () != 0 && nums [i ] < stack .peek ()[1 ]) {
13
+ long [] t = stack .pop ();
14
+ int start = (int ) t [0 ];
15
+ long value = t [1 ];
16
+ long sum = pre [i - 1 ] - ((start - 1 ) < 0 ? 0 : pre [start - 1 ]);
17
+ res = Math .max (res , (value * sum ));
18
+ idx = start ;
19
+ }
20
+ stack .push (new long [] { idx , nums [i ] });
21
+ }
22
+ while (stack .size () != 0 ) {
23
+ long [] t = stack .pop ();
24
+ int start = (int ) t [0 ];
25
+ long value = t [1 ];
26
+ long sum = pre [nums .length - 1 ] - ((start - 1 ) < 0 ? 0 : pre [start - 1 ]);
27
+ res = Math .max (res , (value * sum ));
28
+ }
29
+ return (int ) ((res + mod ) % mod );
30
+ }
31
+ }
You can’t perform that action at this time.
0 commit comments