Codeforces Round #276 (Div. 1) B. Maximum Value
問題リンク
codeforces.com
問題概要
N個の要素をもつ配列が与えられる. このとき, を満たすようなについて, の最大値を求める.
制約:
考えたこと
全ての組み合わせを試すことはできないので, 探索範囲を小さくすることを念頭に置く.
で割った余りが最大になるのは, であるように,
の区間において, に最も近いを求めればよいことが分かる.
これをすべてのについて行うが調和級数を用いることで, 全体計算量はにおさまる.
またの降順にループをまわして, 現在持っている最大値が今見ているより小さくなった時に探索を打ち切るとさらに早くなる.
提出コード
区間のcloseに最も近い要素をlognで求めているので全体計算量は
上記の枝刈りを加えると, 733msから93msになった.
codeforces.com