公式

F - Buildings 2 解説 by toam

Bonus : オンラインで解いてください

オンラインで(クエリを先読みしないで)解くことができます.

解法
高さ $N+1$ のダミーのビルを ビル $N$ の東に置きます.各 $i\ (1\leq i\leq N)$ に対して,ビル $i$ より東にあるビル $i$ より高いビルのうち,最も西にあるものをビル $p_i$ とします.$(1, p_1),\ldots,(N,p_N)$ に辺が貼られた $N+1$ 頂点のグラフ(木)を考えると,ビル $i$ から見ることができるビルは頂点 $i+1$ と頂点 $N+1$ のパス上に並びます.よって,木を頂点 $N+1$ を根とする根付き木として考えたとき,ビル $l,r$ の両方から見ることができるビルの個数は $\mathrm{lca}(l+1,r+1)$ の深さになることが分かります.

実装例

投稿日時:
最終更新: