atcoder-solutionsatcoder-solutions
abc391_f

K-th Largest Triplet の解説

ordered set by @ohnuma

解説

Aiは1..=iの中の要素についてAi番目という意味。

ということで、後ろから前に考えていけば残った配列についての何番目ということになるので、

あとは、残った配列についてのnthの検索とnthの削除がうまくできればよい。 これはhttps://judge.yosupo.jp/problem/ordered_set

をacできるものがあれば対応できます。

fn main() { input! { n: usize, mut p: [Usize1; n] } p.reverse(); let mut ans = vec![usize::MAX; n]; let mut set = OrderedSet::from(&(0..n).collect_vec()); for i in 0..n { set.insert(i); } for (idx, &num) in p.iter().enumerate() { let nth = set.get_nth(num).unwrap(); ans[nth] = n - idx; set.remove(nth); } println!("{}", ans.iter().join(" ")); }

https://github.com/k-ohnuma/k-ohnuma-procon-lib/blob/main/src/data_structure/ordered_set.rs

コメント