From 9d8a00e20a564d7b34a81457562ad23756251fc9 Mon Sep 17 00:00:00 2001 From: jackfiled Date: Sun, 9 Mar 2025 12:33:38 +0800 Subject: [PATCH] 20250309 finished. --- src/problem/mod.rs | 2 + ...2070_most_beautiful_item_for_each_query.rs | 72 +++++++++++++++++++ 2 files changed, 74 insertions(+) create mode 100644 src/problem/p2070_most_beautiful_item_for_each_query.rs diff --git a/src/problem/mod.rs b/src/problem/mod.rs index 8331913..a84ef23 100644 --- a/src/problem/mod.rs +++ b/src/problem/mod.rs @@ -526,3 +526,5 @@ mod p2588_count_the_number_of_beautiful_subarrays; mod p2597_the_number_of_beautiful_subsets; mod p2234_maximum_total_beauty_of_the_gardens; + +mod p2070_most_beautiful_item_for_each_query; diff --git a/src/problem/p2070_most_beautiful_item_for_each_query.rs b/src/problem/p2070_most_beautiful_item_for_each_query.rs new file mode 100644 index 0000000..5f4d777 --- /dev/null +++ b/src/problem/p2070_most_beautiful_item_for_each_query.rs @@ -0,0 +1,72 @@ +/** + * [2070] Most Beautiful Item for Each Query + */ +pub struct Solution {} + +// submission codes start here +use std::collections::BTreeMap; + +impl Solution { + pub fn maximum_beauty(items: Vec>, queries: Vec) -> Vec { + let mut price_map = BTreeMap::new(); + + for item in items.iter() { + let entry = price_map.entry(item[0] as usize).or_insert(0); + *entry = (*entry).max(item[1]); + } + + let mut query_map: BTreeMap = BTreeMap::new(); + let mut result = Vec::with_capacity(queries.len()); + + for price in queries { + let price = price as usize; + let (min_price, mut min_result) = match query_map.range(..=price).last() { + Some((&p, &r)) => (p, r), + None => (0, 0), + }; + + if min_price == price { + result.push(min_result); + continue; + } + + for (&p, &r) in price_map.range(min_price + 1..=price) { + min_result = min_result.max(r); + query_map.insert(p, min_result); + } + + result.push(min_result); + } + + result + } +} + +// submission codes end + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn test_2070() { + assert_eq!( + vec![2, 4, 5, 5, 6, 6], + Solution::maximum_beauty( + vec![vec![1, 2], vec![3, 2], vec![2, 4], vec![5, 6], vec![3, 5]], + vec![1, 2, 3, 4, 5, 6] + ) + ); + assert_eq!( + vec![4], + Solution::maximum_beauty( + vec![vec![1, 2], vec![1, 2], vec![1, 3], vec![1, 4]], + vec![1] + ) + ); + assert_eq!( + vec![0], + Solution::maximum_beauty(vec![vec![10, 1000]], vec![5]) + ); + } +}