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

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

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

분탕의 신 다다스

문제로 돌아가기

해설

각 xxx (1≤x≤n1 \leq x \leq n1≤x≤n)에 대해 길이 mmm의 이진 문자열 AxA_xAx​를 정의하자. Ax[i]A_x[i]Ax​[i]는 li≤x≤ril_i \leq x \leq r_ili​≤x≤ri​이면 111, 아니면 000이다.

두 이진 문자열 P,QP,QP,Q의 서로 다른 위치의 개수를 dist⁡(P,Q)\operatorname{dist}(P,Q)dist(P,Q)라고 하자. 어떤 답변 문자열 BBB가 두 후보 x,yx,yx,y와 모두 모순되지 않으려면

dist⁡(Ax,B)≤k,dist⁡(Ay,B)≤k\operatorname{dist}(A_x,B) \leq k,\qquad \operatorname{dist}(A_y,B) \leq kdist(Ax​,B)≤k,dist(Ay

를 만족해야 한다.

삼각 부등식에 의해 이런 BBB가 존재하려면 dist⁡(Ax,Ay)≤2k\operatorname{dist}(A_x,A_y) \leq 2kdist(Ax​,Ay​)≤2k여야 한다. 반대로 와 가 다른 위치를 두 집합으로 최대한 균등하게 나누어 한쪽에서는 , 다른 쪽에서는 의 비트를 택하면

k=⌈dist⁡(Ax,Ay)2⌉k=\left\lceil\frac{\operatorname{dist}(A_x,A_y)}{2}\right\rceilk=⌈2dist(Ax​,A

로 두 후보를 동시에 가능하게 만들 수 있다. 따라서 정답은

⌈12min⁡1≤x<y≤ndist⁡(Ax,Ay)⌉\left\lceil\frac{1}{2}\min_{1 \leq x<y \leq n}\operatorname{dist}(A_x,A_y)\right\rceil⌈21​1≤x<y≤nmin

이다.

이제 모든 쌍의 최소 거리를 구한다. 하나의 질문 구간 [l,r][l,r][l,r]은 x<yx<yx<y인 쌍 중 정확히 한쪽만 구간에 포함되는 경우에만 거리에 111을 더한다. 이러한 쌍은 다음 두 직사각형으로 나뉜다.

[1,l−1]×[l,r],[l,r]×[r+1,n].[1,l-1]\times[l,r],\qquad [l,r]\times[r+1,n].[1,l−1]×[l,r],[l,r]×[r

두 번째 좌표 yyy를 111부터 nnn까지 증가시키며 스위핑한다. 현재 세그먼트 트리의 xxx번 값은 x<yx<yx<y인 위치에 대해 dist⁡(Ax,가 되도록 관리한다.

구간 [l,r][l,r][l,r]에 대해 필요한 이벤트는 다음과 같다.

  • y=ly=ly=l일 때 구간 [1,l−1][1,l-1][1,l−1]에 111을 더한다.
  • y=r+1y=r+1y=일 때 구간 에서 을 빼고, 구간 에 을 더한다.

각 yyy에서 이벤트를 모두 적용한 뒤 세그먼트 트리의 구간 [1,y−1][1,y-1][1,y−1]의 최솟값을 확인한다. 모든 yyy에 대한 최솟값이 필요한 최소 해밍 거리이다.

각 질문은 상수 번의 구간 덧셈만 만들며, 세그먼트 트리는 구간 덧셈과 구간 최솟값을 O(log⁡n)O(\log n)O(logn)에 처리한다. 전체 시간 복잡도는 O((n+m)log⁡n)O((n+m)\log n)O((n+m)logn)이고, 공간 복잡도는 O(n+m)O(n+m)O(n이다.

Solution written by GPT5.6

​
,
B
)
≤
k
AxA_xAx​
AyA_yAy​
AxA_xAx​
AyA_yAy​
y
​
)
​
⌉
​
dist
(
Ax​
,
Ay​
)
⌉
+
1,n].
Ay)\operatorname{dist}(A_x,A_y)
dist(Ax​,Ay​)
r+
1
[1,l−1][1,l-1][1,l−1]
111
[l,r][l,r][l,r]
111
+
m)