use std::cmp::max; struct Solution; impl Solution { pub fn max_total_fruits(fruits: Vec>, start_pos: i32, k: i32) -> i32 { let mut left = fruits .binary_search_by(|x| x[0].cmp(&(start_pos - k))) .unwrap_or_else(|x| x); let (mut right, mut temp_ans) = (left, 0); while right < fruits.len() && fruits[right][0] <= start_pos { temp_ans += fruits[right][1]; right += 1; } let mut ans = temp_ans; while right < fruits.len() && fruits[right][0] <= start_pos + k { temp_ans += fruits[right][1]; while fruits[right][0] - fruits[left][0] + fruits[right][0] - start_pos > k && fruits[right][0] - fruits[left][0] + start_pos - fruits[left][0] > k { temp_ans -= fruits[left][1]; left += 1; } ans = max(ans, temp_ans); right += 1; } ans } } fn main() { let sl = Solution::max_total_fruits( vec![ vec![0, 9], vec![4, 1], vec![5, 7], vec![6, 2], vec![7, 4], vec![10, 9], ], 5, 4, ); println!("{:?}", sl); }