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

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

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

이진수열과 쿼리

문제로 돌아가기

해설

편의상 인덱스를 000부터 N−1N-1N−1까지 사용한다. 모든 인덱스는 NNN으로 나눈 나머지로 해석한다.

같은 시작점에서 연산을 두 번 하면 서로 상쇄된다. 따라서 시작점 iii에서 연산을 홀수 번 하는지를 xi∈{0,1}x_i\in\{0,1\}xi​∈{0,1}로 두면 충분하다.

위치 iii가 최종적으로 0이 되려면

ai=⨁j=i−K+1ixja_i=\bigoplus_{j=i-K+1}^{i}x_jai​=j=i−K+1⨁i​

가 성립해야 한다. 인접한 두 식을 XOR하면

xi⊕xi−K=Δi,Δi=ai⊕ai−1x_i\oplus x_{i-K}=\Delta_i,\qquad \Delta_i=a_i\oplus a_{i-1}xi​⊕xi−K​=

를 얻는다.

d=gcd⁡(N,K)d=\gcd(N,K)d=gcd(N,K), m=N/dm=N/dm=N/d, h=K/dh=K/dh=K/라 하자. 는 정확히 개의 길이 인 순환으로 분해된다.

나머지 클래스 rrr에 대해

Pr=⨁i≡r(modd)aiP_r=\bigoplus_{i\equiv r\pmod d}a_iPr​=i≡r(modd)⨁

라 하자. 한 순환에서 모든 차분식을 XOR한 값은 Pr⊕Pr−1P_r\oplus P_{r-1}Pr​⊕Pr−1​이다. 따라서 차분식이 모순 없이 풀리기 위한 필요충분조건은

P0=P1=⋯=Pd−1P_0=P_1=\cdots=P_{d-1}P0​=P1​=⋯=P

이다.

각 순환을

vt=r+tK(modN),t=0,…,m−1v_t=r+tK\pmod N,\qquad t=0,\ldots,m-1vt​=r+tK(modN),

순서로 놓는다. 한 canonical 해를

xv0=0,xvt=xvt−1⊕Δvt(t≥1)x_{v_0}=0,\qquad x_{v_t}=x_{v_{t-1}}\oplus\Delta_{v_t}\quad(t\ge1)xv0​​=0,x

로 잡는다. 순환 rrr에서 xxx가 111인 개수를 crc_rcr​라 하자.

차분식만 보면 각 순환 전체를 뒤집는 자유변수 yry_ryr​가 하나씩 있다. yr=0y_r=0yr​=0의 비용은 crc_r, 의 비용은 이다. 따라서 차분식만 만족시키는 최소 비용은

B=∑rmin⁡(cr,m−cr)B=\sum_r\min(c_r,m-c_r)B=r∑​min(cr​,m−c

이다.

차분식은 원래 식들의 차이만 사용했으므로 원래 식 하나를 더 맞춰야 한다. 위치 000의 식에 대한 잔여값을

E=a0⊕⨁j=−K+10xjE=a_0\oplus\bigoplus_{j=-K+1}^{0}x_jE=a0​⊕j=−K+1⨁0

라 하자. 목표는 E=0E=0E=0이다.

길이 KKK인 구간에는 각 나머지 클래스의 원소가 정확히 h=K/dh=K/dh=K/d개씩 들어간다.

hhh가 짝수이면 한 순환 전체를 뒤집어도 EEE가 변하지 않는다. 따라서 E=1E=1E=1이면 불가능하고, E=0E=0E=0이면 답은 BBB이다.

hhh가 홀수이면 각 yry_ryr​가 EEE를 한 번씩 뒤집는다. 즉

y0⊕y1⊕⋯⊕yd−1=Ey_0\oplus y_1\oplus\cdots\oplus y_{d-1}=Ey0​⊕y1​⊕⋯⊕y

를 만족해야 한다. 비용만 보고 선호하는 선택을

zr=[cr>m/2],Z=⨁rzrz_r=[c_r>m/2],\qquad Z=\bigoplus_r z_rzr​=[cr​>m/2],

라 하자. Z=EZ=EZ=E이면 답은 BBB이다. 그렇지 않으면 순환 하나의 선택을 반대로 해야 하며 추가 비용은

min⁡r∣m−2cr∣\min_r|m-2c_r|rmin​∣m−2cr​∣

이다.

이제 쿼리를 처리한다. apa_pap​를 뒤집으면 Δp\Delta_pΔp​와 Δp+1\Delta_{p+1}Δ만 뒤집히고, 만 뒤집힌다. 따라서 모든 가 같은지는 인 클래스의 개수만 관리하면 에 판별할 수 있다.

순환 안에서 Δvs\Delta_{v_s}Δvs​​가 뒤집히면 s≥1s\ge1s≥1일 때 canonical 해의

xvs,xvs+1,…,xvm−1x_{v_s},x_{v_{s+1}},\ldots,x_{v_{m-1}}xvs​​,xv

가 모두 뒤집힌다. s=0s=0s=0인 Δv0\Delta_{v_0}Δv0​​는 순환의 닫힘 조건에만 쓰이므로 canonical 해 자체는 바뀌지 않는다.

모든 순환을 순환 순서대로 이어 붙인 길이 NNN 배열을 만들고, 구간 뒤집기와 구간의 111 개수 질의를 지원하는 lazy segment tree를 사용한다. 각 쿼리는 suffix 뒤집기 최대 두 번과 영향을 받은 순환의 crc_rcr​ 재계산만 필요하다.

각 순환의 crc_rcr​가 바뀔 때 다음 값을 함께 갱신한다.

  • B=∑rmin⁡(cr,m−cr)B=\sum_r\min(c_r,m-c_r)B=∑r​min(cr​,m−c

EEE도 매번 직접 다시 계산할 필요가 없다. 각 Δu\Delta_uΔu​를 뒤집을 때 canonical 해에서 뒤집히는 suffix가 EEE의 길이 KKK 구간과 몇 개 겹치는지의 홀짝을 impact[u]impact[u]로 전처리한다. 순환의 시작점에서는 이다. 쿼리 에 대해

E⊕=[p=0]⊕impact[p]⊕impact[p+1]E\mathrel{\oplus}=[p=0]\oplus impact[p]\oplus impact[p+1]E⊕=[p=0]⊕impact[p]⊕impact

로 갱신할 수 있다.

따라서 각 쿼리의 답은 다음과 같다.

  • PrP_rPr​들이 모두 같지 않으면 -1.
  • hhh가 짝수이면 E=1E=1E=1일 때 -1, 아니면 BBB.
  • 가 홀수이면 .

각 테스트 케이스의 전처리는 O(Nlog⁡N)O(N\log N)O(NlogN), 각 쿼리는 O(log⁡N)O(\log N)O(logN)이다. 전체 시간복잡도는 O((N+Q)log⁡N)O((N+Q)\log N)O((N+Q이고 메모리는 이다.

Solution written by GPT5.6

x
j​
Δ
i​
,
Δi​
=
ai​⊕
ai−1​
d
i↦i+Ki\mapsto i+Ki↦i+K
ddd
mmm
​
ai​
d−1
​
t
=
0,…,m−
1
vt​​
=
xvt−1​​⊕
Δvt​​(t≥
1)
cr​
yr=1y_r=1yr​=1
m−crm-c_rm−cr​
r​
)
​
xj​
d−1
​
=
E
Z
=
r⨁​zr​
p+1
​
Pp mod dP_{p\bmod d}Ppmodd​
PrP_rPr​
Pr=1P_r=1Pr​=1
O(1)O(1)O(1)
s+1
​
​
,
…
,
xvm−1​​
r​
)
  • Z=⨁r[cr>m/2]Z=\bigoplus_r[c_r>m/2]Z=⨁r​[cr​>m/2]
  • ∣m−2cr∣|m-2c_r|∣m−2cr​∣들의 multiset
  • impact[u]
    impact[u]=0impact[u]=0impact[u]=0
    ppp
    [
    p
    +
    1]
    hh
    h
    B+[Z≠E]⋅min⁡r∣m−2cr∣B+[Z\ne E]\cdot\min_r|m-2c_r|B+[Z=E]⋅minr​∣m−2cr​∣
    )
    log
    N
    )
    O(N)O(N)O(N)