@@ -10,26 +10,24 @@ public int minimumPairRemoval(int[] nums) {
10
10
if (nums .length == 1 ) {
11
11
return 0 ;
12
12
}
13
- int size = (int ) Math .pow (2 , Math .ceil (Math .log (nums .length - 1 ) / Math .log (2 )));
13
+ int size = (int ) Math .pow (2 , Math .ceil (Math .log (nums .length - 1.0 ) / Math .log (2 )));
14
14
long [] segment = new long [size * 2 - 1 ];
15
15
Arrays .fill (segment , Long .MAX_VALUE );
16
16
int [] lefts = new int [size * 2 - 1 ];
17
17
int [] rights = new int [size * 2 - 1 ];
18
18
long [] sums = new long [nums .length ];
19
19
Arrays .fill (sums , Long .MAX_VALUE / 2 );
20
20
int [][] arrIdxToSegIdx = new int [nums .length ][];
21
- boolean [] isDecs = new boolean [nums .length ];
22
21
sums [0 ] = nums [0 ];
23
22
int count = 0 ;
24
23
arrIdxToSegIdx [0 ] = new int [] {-1 , size - 1 };
25
24
for (int i = 1 ; i < nums .length ; i ++) {
26
25
if (nums [i ] < nums [i - 1 ]) {
27
- isDecs [i ] = true ;
28
26
count ++;
29
27
}
30
28
lefts [size + i - 2 ] = i - 1 ;
31
29
rights [size + i - 2 ] = i ;
32
- segment [size + i - 2 ] = nums [i - 1 ] + nums [i ];
30
+ segment [size + i - 2 ] = nums [i - 1 ] + ( long ) nums [i ];
33
31
arrIdxToSegIdx [i ] = new int [] {size + i - 2 , size + i - 1 };
34
32
sums [i ] = nums [i ];
35
33
}
@@ -39,6 +37,16 @@ public int minimumPairRemoval(int[] nums) {
39
37
int r = 2 * i + 2 ;
40
38
segment [i ] = Math .min (segment [l ], segment [r ]);
41
39
}
40
+ return getRes (count , segment , lefts , rights , sums , arrIdxToSegIdx );
41
+ }
42
+
43
+ private int getRes (
44
+ int count ,
45
+ long [] segment ,
46
+ int [] lefts ,
47
+ int [] rights ,
48
+ long [] sums ,
49
+ int [][] arrIdxToSegIdx ) {
42
50
int res = 0 ;
43
51
while (count > 0 ) {
44
52
int segIdx = 0 ;
0 commit comments