@@ -10,26 +10,24 @@ public int minimumPairRemoval(int[] nums) {
1010 if (nums .length == 1 ) {
1111 return 0 ;
1212 }
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 )));
1414 long [] segment = new long [size * 2 - 1 ];
1515 Arrays .fill (segment , Long .MAX_VALUE );
1616 int [] lefts = new int [size * 2 - 1 ];
1717 int [] rights = new int [size * 2 - 1 ];
1818 long [] sums = new long [nums .length ];
1919 Arrays .fill (sums , Long .MAX_VALUE / 2 );
2020 int [][] arrIdxToSegIdx = new int [nums .length ][];
21- boolean [] isDecs = new boolean [nums .length ];
2221 sums [0 ] = nums [0 ];
2322 int count = 0 ;
2423 arrIdxToSegIdx [0 ] = new int [] {-1 , size - 1 };
2524 for (int i = 1 ; i < nums .length ; i ++) {
2625 if (nums [i ] < nums [i - 1 ]) {
27- isDecs [i ] = true ;
2826 count ++;
2927 }
3028 lefts [size + i - 2 ] = i - 1 ;
3129 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 ];
3331 arrIdxToSegIdx [i ] = new int [] {size + i - 2 , size + i - 1 };
3432 sums [i ] = nums [i ];
3533 }
@@ -39,6 +37,16 @@ public int minimumPairRemoval(int[] nums) {
3937 int r = 2 * i + 2 ;
4038 segment [i ] = Math .min (segment [l ], segment [r ]);
4139 }
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 ) {
4250 int res = 0 ;
4351 while (count > 0 ) {
4452 int segIdx = 0 ;
0 commit comments