AtCoder Beginner Contest 231 F 問題 Jealous Two
問題
提出解答
問題の概要
長さが の2つの列 が与えられる. 以下を満たす整数の組 はいくつか?
- かつ
制約
- 入力はすべて整数
解法
まず, かつ という条件については順序だけを見ていることから, 座標圧縮を行うことで, としてもよい. そして, を となる の個数とすることにより, は異なる 個の項からなるとしてもよい. 以下, の情報を残し, は互いに異なるとして良い.
の並び替え を以下を満たすように並び替える.
- に対して, ならば, 以下のうちのどちらか一方が成り立つ.
- かつ
そして, 以下のように実行すると正解 を求めることができる.
- を全ての項が である長さ の列とする.
- の順に以下を実行する.
- に を加算する.
- に を加算する.
- を出力する.
を求めるパートがボトルネックになる. ここで, にはある 点に加算することと区間和を求めることを要求する. これを得意とするデータ構造は BIT や平行二分木がある.
このようなデータ構造を用いることで, 計算量 で求めることができる.