mini notes

競技プログラミングの解法メモを残していきます。

DISCO presents ディスカバリーチャンネル プログラミングコンテスト2016 予選 B - ディスコ社内ツアー

問題:B - ディスコ社内ツアー

解答:Submission #11247515 - DISCO presents ディスカバリーチャンネル プログラミングコンテスト2016 予選

解法:見ていく順番は一意に決まるので何周するかを求めればよいが、Nに関するループの繰り返しにするとTLE。

同じA[i]のもののインデックス集合を作り、aのループにする。

今いるインデックスを保持して置き、各aではその次のインデックスをupper_boundで探してあげる。この操作で最大O(logN)、次のインデックスはO(1)で探せるので、O(max_A * logN)で計算できる。

なお、周回数はendedフラグをもっておいて、終端まで達した状態でインデックスが1以上になったらカウントアップするとよさそう。