競技プログラミング用 知識集積所
ABC410C - Rotatable Array
最終更新:
sport_programming
-
view
問題
必要知識
B以下レベルの内容は省略
- 特になし
考え方
愚直にやると、deque(未作成)あたりを使ってやればすぐにできそうに見える。
しかし、クエリ3のときのkの値が大きいと、計算量が大きくなる。
また、毎回vector(未作成)を作り直すのも、nの値が大きいと時間が間に合わなくなる。
しかし、クエリ3のときのkの値が大きいと、計算量が大きくなる。
また、毎回vector(未作成)を作り直すのも、nの値が大きいと時間が間に合わなくなる。
そこで、最初はスタート位置を0番としておいて、クエリ3のときにはデータの方ではなくスタート位置の方を1つずらすことにする。
要求位置を調べる際に、後ろにはみ出したらループして先頭に戻るということにすれば、渡されたデータを一切いじらずに解答できる。
しかも、これはk回ずらすのを単純にk足す処理として済ませられるのでTLEも回避できる。
要求位置を調べる際に、後ろにはみ出したらループして先頭に戻るということにすれば、渡されたデータを一切いじらずに解答できる。
しかも、これはk回ずらすのを単純にk足す処理として済ませられるのでTLEも回避できる。
ただし、クエリ1とクエリ2のときに、スタート位置から見ての位置を正しく計算する必要がある。
%演算を使ってうまく処理すること。
%演算を使ってうまく処理すること。