DOJ logoDOJ
問題
最近追加された問題保存した問題Workbooks
カテゴリDLCコンテストグループチーム掲示板
ランキング
正解数ランキングストリークランキングDOJ Powerランキング
提出状況
問題募集ログイン新規登録
DOJ logoDOJ

OI形式のサブタスク採点、Eloレーティング、Discord認証を備えたオンラインジャッジです。

問題
問題一覧カテゴリ
コミュニティ
コンテストランキング掲示板お知らせ外部のコンテストを開催するガイド
アカウント
ログイン新規登録ジャッジ状態
ポリシー
利用規約DLCの利用規則プライバシーAPI 文書言語ランタイムコンテストの順位報酬レーティングとパフォーマンス
© 2026 DOJ
All rights reserved
解説

Array Rotation and Queries

問題に戻る

解説

각 정수 vvv에 대해 서로 다른 두 정점 vvv와 −v-v−v를 만든다. 또한 왼쪽 끝을 나타내는 정점 LLL과 오른쪽 끝을 나타내는 정점 RRR을 만든다.

현재 수열이 [a1,a2,⋯ ,aN][a_1,a_2,\cdots,a_N][a1​,a2​,⋯,aN​]일 때 다음 무방향 연결을 저장한다.

  • LLL과 −a1-a_1−a1​을 연결한다.
  • 각 1≤i<N1\leq i<N1≤i<N에 대해 aia_i와 을 연결한다.

모든 정점의 차수는 정확히 111이므로, 각 정점의 유일한 이웃을 배열 mate⁡\operatorname{mate}mate에 저장할 수 있다.

수열에서 서로 이웃한 두 값이 u,vu,vu,v라면 이 둘은 연결 {u,−v}\{u,-v\}{u,−v}로 표현된다. 쿼리로 이 두 값의 순서가 뒤집히고 부호도 바뀌면 새 인접쌍은 −v,−u-v,-u−v,−u가 된다. 이 인접쌍을 표현하는 연결은 {−v,u}\{-v,u\}{−이므로 기존 연결과 같다. 따라서 쿼리 구간 내부의 연결은 하나도 바꿀 필요가 없다.

쿼리의 양 끝을 x,yx,yx,y라 하자. 다음 두 값을 구한다.

ℓ=mate⁡(−x),r=mate⁡(y).\ell=\operatorname{mate}(-x),\qquad r=\operatorname{mate}(y).ℓ=mate(−x),r=mate(y).

쿼리 전에는 연결 {−x,ℓ}\{-x,\ell\}{−x,ℓ}과 {y,r}\{y,r\}{y,r}이 존재한다. 이 두 연결을 지우고 다음 두 연결을 추가한다.

{ℓ,y},{−x,r}.\{\ell,y\},\qquad \{-x,r\}.{ℓ,y},{−x,r}.

이는 구간의 첫 원소가 xxx에서 −y-y−y로, 마지막 원소가 yyy에서 −x-x−x로 바뀌는 것을 정확히 표현한다. 각 쿼리는 배열 원소 네 개를 갱신하는 것으로 처리된다.

최종 수열은 LLL에서 시작하여 복원한다. mate⁡(L)=−a1\operatorname{mate}(L)=-a_1mate(L)=−a1​이므로 첫 원소는 −mate⁡(L)-\operatorname{mate}(L)−mate(L)이다. 현재 원소가 이고 이면 다음 원소는 이다.

초기화와 최종 복원은 O(N)O(N)O(N), 각 쿼리는 O(1)O(1)O(1)이다. 전체 시간 복잡도는 O(N+Q)O(N+Q)O(N+Q)이고, 메모리 복잡도는 O(N)O(N)O(이다.

Solution written by GPT5.6

ai​
−ai+1-a_{i+1}−ai+1​
  • aNa_NaN​과 RRR을 연결한다.
  • v
    ,
    u
    }
    vvv
    mate⁡(v)≠R\operatorname{mate}(v)\neq Rmate(v)=R
    −mate⁡(v)-\operatorname{mate}(v)−mate(v)
    N
    )