diff --git a/arc134/src/bin/b.rs b/arc134/src/bin/b.rs index 2a9506c8..e113c772 100644 --- a/arc134/src/bin/b.rs +++ b/arc134/src/bin/b.rs @@ -1,10 +1,33 @@ -use proconio::{input, marker::Usize1}; +use std::{cmp::Reverse, collections::BinaryHeap}; + +use proconio::{input, marker::Chars}; fn main() { input! { n: usize, - a: [Usize1; n], + s: Chars, }; - let ans = n - a.len(); - println!("{}", ans); + + let mut pq = BinaryHeap::new(); + for (i, s_i) in s.iter().copied().enumerate() { + pq.push((Reverse(s_i), i)); + } + + let mut r = n; + let mut ans = s.clone(); + for (l, s_l) in s.iter().copied().enumerate() { + while let Some((Reverse(s_j), j)) = pq.pop() { + if j < l || r <= j { + continue; + } + if s_j < s_l { + r = j; + ans.swap(l, r); + } else { + pq.push((Reverse(s_j), j)); + } + break; + } + } + println!("{}", ans.iter().collect::()); }