use std::cmp::max; struct Solution; impl Solution { pub fn min_operations(queries: Vec>) -> i64 { let mut ans: i64 = 0; let splits = vec![0,1,4,16,64,256,1024,4096,16384,65536,262144,1048576,4194304,16777216,67108864,268435456,1073741824]; for query in queries { let l = query[0]; let r = query[1]; let mut local_ans:i64 = 0; for i in 1..splits.len() { let split = splits[i]; if split < l { continue; } let left = max(l, splits[i-1]); if split > r { local_ans += (r - left + 1) as i64 * (i-1) as i64; break; } local_ans += (split - left ) as i64 * (i-1) as i64; } ans += local_ans / 2 + local_ans % 2; } ans } } fn main() { let sl = Solution::min_operations(vec![vec![1,2],vec![2,4]]); println!("{:?}", sl); }