diff --git a/src/main.rs b/src/main.rs index 905189c..8cd4572 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,25 +1,30 @@ struct Solution; impl Solution { - pub fn max_sum(mut nums: Vec) -> i32 { - nums.sort_by(|a,b| b.cmp(a)); - let mut last = nums[0]; - let mut ans = nums[0]; - for i in 1..nums.len() { - let t = nums[i]; - if t <= 0 { - break + pub fn max_subarrays(n: i32, mut conflicting_pairs: Vec>) -> i64 { + let mut arr: Vec> = vec![vec![]; (n + 1) as usize]; + for pair in conflicting_pairs.iter_mut() { + if pair[0] > pair[1] { + pair.swap(0, 1); } - if t == last { - continue; - } - last = t; - ans += t; + arr[pair[0] as usize].push(pair[1]); } - ans + let mut ans: i64 = 0; + let mut extra: Vec = vec![0; (n + 2) as usize]; + let mut b: Vec = vec![(n + 1) as i64; (n + 1) as usize]; + for i in (1..=n as usize).rev() { + b.extend(arr[i].iter().map(|&x| x as i64)); + b.sort_unstable(); + b.truncate(2); + + ans += (b[0] as i64) - (i as i64); + extra[b[0] as usize] += b[1] - b[0]; + } + ans + *extra.iter().max().unwrap() as i64 } } fn main() { - let sl = Solution::max_sum(vec![-1,-2]); + let sl = Solution::max_subarrays(5, vec![vec![1, 2], vec![2, 5], vec![3, 5]]); println!("{}", sl); } +