noshi91のメモ

データ構造のある風景

ABC091/ARC092 D Two Sequences の解法について

O(N * log(max(a))解法

 解法の軸は解説の通りですが、いくらかの工夫をします。まず、数列のソートに桁ごとのバケットソートを使用します。下位の桁から順に計算していけば基数ソートの動きそのままになるので、各桁で O(N) でソートが可能です。数列 a, b 双方をこれでソートしておくことで二分探索パートに尺取りを使えるようになり、こちらも O(N) に抑えることが出来ます。よって全体で O(N * log(max(a))) になります。

 本番では想定解法にすら辿り着けませんでしたが、2つの部分それぞれで log を落とす美しい解法だと思います。*1

Submission #2424985 - AtCoder Beginner Contest 091

 

WaveletMatrixで解く

 

www.youtube.com

 こちらを見て、実装パートを WaveletMatrix でショートカット出来ることを知りました*2。自分の実装でやってみたところ、ぎりぎりTLE回避できたので載せます。やはり WaveletMatrix は強いと感じました。

Submission #2425330 - AtCoder Beginner Contest 091

 

 私が現状使用しているライブラリ*3も貼っておきます(宣伝)

github.com

*1:想定解法がこれでないのが少し残念です

*2:自力で気付けなかったのでデータ構造芸人失格

*3: Kutimotitokura さんと共同で管理しています