No.259

領域を2倍して の領域は右向きの魚, の領域は左向きの魚がいるとみなす. ただし の領域は水槽を反転しているものとする.

こうすることで, すべての魚は右向きに進むと考えることができる. (右端まで移動したら左端に戻る)

秒に の位置に右向きの魚を投入するということは, 秒に の位置に魚を投入したことになり, 秒に の位置に左向きの魚を投入するということは, の位置に魚を投入したことになる.

秒に の領域の魚の数を数えるということは, 秒に の領域の魚の数を数えることになる.

位置はいずれも で割った余りを取る.

以上を Binary Indexed Tree で管理する.