2025-09-06 00:39:05 +08:00
|
|
|
use std::cmp::max;
|
2025-09-05 11:41:56 +08:00
|
|
|
|
2025-07-10 14:13:01 +08:00
|
|
|
struct Solution;
|
|
|
|
impl Solution {
|
2025-09-06 00:39:05 +08:00
|
|
|
pub fn min_operations(queries: Vec<Vec<i32>>) -> 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;
|
2025-08-18 14:16:41 +08:00
|
|
|
}
|
2025-09-06 00:39:05 +08:00
|
|
|
let left = max(l, splits[i-1]);
|
|
|
|
if split > r {
|
|
|
|
local_ans += (r - left + 1) as i64 * (i-1) as i64;
|
2025-09-05 11:41:56 +08:00
|
|
|
break;
|
|
|
|
}
|
2025-09-06 00:39:05 +08:00
|
|
|
local_ans += (split - left ) as i64 * (i-1) as i64;
|
2025-09-05 11:41:56 +08:00
|
|
|
}
|
2025-09-06 00:39:05 +08:00
|
|
|
ans += local_ans / 2 + local_ans % 2;
|
2025-09-05 11:41:56 +08:00
|
|
|
}
|
2025-09-06 00:39:05 +08:00
|
|
|
ans
|
2025-07-10 14:13:01 +08:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
fn main() {
|
2025-09-06 00:39:05 +08:00
|
|
|
let sl = Solution::min_operations(vec![vec![1,2],vec![2,4]]);
|
2025-07-29 11:20:14 +08:00
|
|
|
println!("{:?}", sl);
|
2025-07-10 14:13:01 +08:00
|
|
|
}
|