Official
L - 平均クエリ/Average queries Editorial
by
L - 平均クエリ/Average queries Editorial
by
nok0
\(f(l,r)\) の性質を観察しましょう。
\(S\) に含まれる要素を昇順に \(S_1,\ldots,S_k\) とすると、実は以下の性質が成り立ちます。
- クエリ \(2\) で答える \(f(l,r)\) の最大値は、\(f(S_1,S_2),f(S_2,S_3),\ldots,f(S_{k-1},S_k)\) のいずれかの値と一致する。
(証明): \(f(S_i, S_j)\ (j-i > 1)\) 、\(f(S_i,S_{i+1})\) と \(f(S_{i+1},S_j)\) に対して、\(f(S_i,S_j) \leq f(S_i,S_{i+1})\) または \(f(S_i,S_j) \leq f(S_{i+1},S_j)\) の少なくとも一方が成り立つ。これは \(f\) の定義式より従う。
この関係式を繰り返し用いることで、上述の性質が示される。(証明終わり)
上述の性質を用いると、\(S\) に含まれる隣接する要素についてのみ \(f\) を管理すればよいことが分かります。これは、std::multiset
などのデータ構造を用いることで可能です。
類題は ABC308-G Minimum Xor Pair Query 等です。そちらの実装も参考にしてください。
posted:
last update: