DOJ logoDOJ
문제
최근 추가된 문제들저장한 문제
카테고리DLC대회그룹팀게시판
랭킹
문제 풀이 랭킹스트릭 랭킹DOJ Power 랭킹
현황
문제 제안로그인회원가입
DOJ logoDOJ

OI 서브태스크 채점, Elo 레이팅, Discord 인증을 갖춘 커뮤니티 온라인 저지.

문제
문제 목록카테고리
커뮤니티
대회랭킹게시판공지사항외부 대회 개최이용 안내
계정
로그인회원가입채점 현황
정책
이용약관DLC 이용 규칙개인정보 처리방침API 사용 설명서언어별 채점 환경대회 순위 보상레이팅과 퍼포먼스
© 2026 DOJ
모든 권리 보유
해설

배열 회전과 쿼리

문제로 돌아가기

해설

각 정수 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
    )