File tree Expand file tree Collapse file tree 5 files changed +112
-0
lines changed
solutions/3400-3499/3495.minimum-operations-to-make-array-elements-zero Expand file tree Collapse file tree 5 files changed +112
-0
lines changed Original file line number Diff line number Diff line change
1
+ class Solution {
2
+ public:
3
+ long long minOperations (vector<vector<int >>& queries) {
4
+ auto f = [&](long long x) {
5
+ long long res = 0 ;
6
+ long long p = 1 ;
7
+ int i = 1 ;
8
+ while (p <= x) {
9
+ long long cnt = min (p * 4 - 1 , x) - p + 1 ;
10
+ res += cnt * i;
11
+ i++;
12
+ p *= 4 ;
13
+ }
14
+ return res;
15
+ };
16
+
17
+ long long ans = 0 ;
18
+ for (auto & q : queries) {
19
+ int l = q[0 ], r = q[1 ];
20
+ long long s = f (r) - f (l - 1 );
21
+ long long mx = f (r) - f (r - 1 );
22
+ ans += max ((s + 1 ) / 2 , mx);
23
+ }
24
+ return ans;
25
+ }
26
+ };
Original file line number Diff line number Diff line change
1
+ func minOperations (queries [][]int ) (ans int64 ) {
2
+ f := func (x int64 ) (res int64 ) {
3
+ var p int64 = 1
4
+ i := int64 (1 )
5
+ for p <= x {
6
+ cnt := min (p * 4 - 1 , x ) - p + 1
7
+ res += cnt * i
8
+ i ++
9
+ p *= 4
10
+ }
11
+ return
12
+ }
13
+ for _ , q := range queries {
14
+ l , r := int64 (q [0 ]), int64 (q [1 ])
15
+ s := f (r ) - f (l - 1 )
16
+ mx := f (r ) - f (r - 1 )
17
+ ans += max ((s + 1 )/ 2 , mx )
18
+ }
19
+ return
20
+ }
Original file line number Diff line number Diff line change
1
+ class Solution :
2
+ def minOperations (self , queries : List [List [int ]]) -> int :
3
+ def f (x : int ) -> int :
4
+ res = 0
5
+ p = i = 1
6
+ while p <= x :
7
+ cnt = min (p * 4 - 1 , x ) - p + 1
8
+ res += cnt * i
9
+ i += 1
10
+ p *= 4
11
+ return res
12
+
13
+ ans = 0
14
+ for l , r in queries :
15
+ s = f (r ) - f (l - 1 )
16
+ mx = f (r ) - f (r - 1 )
17
+ ans += max ((s + 1 ) // 2 , mx )
18
+ return ans
Original file line number Diff line number Diff line change
1
+ impl Solution {
2
+ pub fn min_operations ( queries : Vec < Vec < i32 > > ) -> i64 {
3
+ let f = |x : i64 | -> i64 {
4
+ let mut res: i64 = 0 ;
5
+ let mut p: i64 = 1 ;
6
+ let mut i: i64 = 1 ;
7
+ while p <= x {
8
+ let cnt = std:: cmp:: min ( p * 4 - 1 , x) - p + 1 ;
9
+ res += cnt * i;
10
+ i += 1 ;
11
+ p *= 4 ;
12
+ }
13
+ res
14
+ } ;
15
+
16
+ let mut ans: i64 = 0 ;
17
+ for q in queries {
18
+ let l = q[ 0 ] as i64 ;
19
+ let r = q[ 1 ] as i64 ;
20
+ let s = f ( r) - f ( l - 1 ) ;
21
+ let mx = f ( r) - f ( r - 1 ) ;
22
+ ans += std:: cmp:: max ( ( s + 1 ) / 2 , mx) ;
23
+ }
24
+ ans
25
+ }
26
+ }
Original file line number Diff line number Diff line change
1
+ function minOperations ( queries : number [ ] [ ] ) : number {
2
+ const f = ( x : number ) : number => {
3
+ let res = 0 ;
4
+ let p = 1 ;
5
+ let i = 1 ;
6
+ while ( p <= x ) {
7
+ const cnt = Math . min ( p * 4 - 1 , x ) - p + 1 ;
8
+ res += cnt * i ;
9
+ i ++ ;
10
+ p *= 4 ;
11
+ }
12
+ return res ;
13
+ } ;
14
+
15
+ let ans = 0 ;
16
+ for ( const [ l , r ] of queries ) {
17
+ const s = f ( r ) - f ( l - 1 ) ;
18
+ const mx = f ( r ) - f ( r - 1 ) ;
19
+ ans += Math . max ( Math . ceil ( s / 2 ) , mx ) ;
20
+ }
21
+ return ans ;
22
+ }
You can’t perform that action at this time.
0 commit comments