DOJ logoDOJ
Problems
Recently added problemsSaved problems
CategoriesDLCContestsGroupsTeamsBoard
Ranking
Solved Problem RankingStreak rankingDOJ Power ranking
Status
Call for TasksLoginRegister
DOJ logoDOJ

Community online judge with OI-style subtask scoring, Elo ratings, and Discord-backed certification.

Problems
ProblemsCategories
Community
ContestsRankingBoardNoticesHost an external contestGuide
Account
LoginRegisterJudge Status
Policy
Terms of ServiceDLC RulesPrivacyAPI documentationLanguage runtimesContest rank rewardsRating and performance
© 2026 DOJ
All rights reserved
Editorial

분탕의 신 다다스

Back to problem

Editorial

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