2025-08-03 16:44:07 +08:00
|
|
|
use std::cmp::max;
|
2025-08-02 11:43:45 +08:00
|
|
|
|
2025-07-10 14:13:01 +08:00
|
|
|
struct Solution;
|
|
|
|
impl Solution {
|
2025-08-03 16:44:07 +08:00
|
|
|
pub fn max_total_fruits(fruits: Vec<Vec<i32>>, 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;
|
2025-08-02 11:43:45 +08:00
|
|
|
}
|
2025-08-03 16:44:07 +08:00
|
|
|
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;
|
2025-08-01 10:39:53 +08:00
|
|
|
}
|
2025-08-03 16:44:07 +08:00
|
|
|
ans = max(ans, temp_ans);
|
|
|
|
right += 1;
|
2025-07-30 10:59:42 +08:00
|
|
|
}
|
2025-08-03 16:44:07 +08:00
|
|
|
ans
|
2025-07-10 14:13:01 +08:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
fn main() {
|
2025-08-03 16:44:07 +08:00
|
|
|
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,
|
|
|
|
);
|
2025-07-29 11:20:14 +08:00
|
|
|
println!("{:?}", sl);
|
2025-07-10 14:13:01 +08:00
|
|
|
}
|