DOJ logoDOJ
题目
最近添加的题目收藏的题目Workbooks
分类DLC比赛小组团队讨论区
排名
解题数量排行榜连续解题排名DOJ Power 排行榜
评测状态
征题登录注册
DOJ logoDOJ

支持 OI 子任务计分、Elo 等级分和 Discord 认证的社区在线评测系统。

题目
题目列表分类
社区
比赛排名讨论区公告举办外部比赛指南
账号
登录注册评测状态
政策
服务条款DLC 使用规则隐私政策API 文档语言运行环境比赛排名奖励评级与表现
© 2026 DOJ
保留所有权利
题解

Dynamic Nonogram

返回题目

题解

현재 수열의 길이를 KKK, 원소의 합을 SSS라고 하자. K=0K=0K=0이면 정답은 000이다.

K≥1K \ge 1K≥1일 때, 모든 컴포넌트와 컴포넌트 사이의 필수 빈칸을 가장 조밀하게 배치하는 데 필요한 길이는

L=S+K−1L=S+K-1L=S+K−1

이다. 올바른 색칠이 존재하므로 L≤WL \le WL≤W이다. 남는 빈칸의 수를

D=W−LD=W-LD=W−L

이라고 하자.

iii번째 컴포넌트를 가능한 한 왼쪽에 배치했을 때의 시작점을 pip_ipi​라고 하자. 가능한 한 오른쪽에 배치하면 모든 컴포넌트의 시작점이 정확히 DDD만큼 오른쪽으로 이동하므로, iii번째 컴포넌트의 시작점은 pi+Dp_i+D가 된다.

따라서 iii번째 컴포넌트가 모든 올바른 색칠에서 덮는 칸은 두 배치에서의 구간이 겹치는 부분이고, 그 개수는

max⁡(0,Ai−D)\max(0,A_i-D)max(0,Ai​−D)

이다.

이 구간들 외의 칸이 항상 색칠될 수는 없다. 왼쪽 조밀 배치에서 해당 칸보다 왼쪽에서 끝나는 컴포넌트의 개수를 jjj라고 하자. 여분의 DDD칸을 jjj번째 컴포넌트와 j+1j+1j+1번째 컴포넌트 사이에 모두 넣으면, 앞의 jjj개 컴포넌트는 왼쪽 조밀 배치에 있고 나머지는 오른쪽 조밀 배치에 있다. 과 는 각각 첫 컴포넌트 앞과 마지막 컴포넌트 뒤의 간격을 뜻한다. 이 배치에서는 해당 칸이 색칠되지 않는다.

따라서 정답은

∑i=1Kmax⁡(0,Ai−D)=∑Ai>DAi−D⋅#{i:Ai>D}\sum_{i=1}^{K}\max(0,A_i-D) = \sum_{A_i>D}A_i-D\cdot \#\{i:A_i>D\}i=1∑K​max(0,A

이다.

쿼리의 삽입 위치는 이 식에 영향을 주지 않는다. 필요한 정보는 현재 원소들의 개수, 합, 그리고 값별 개수뿐이다.

모든 1번 쿼리의 XXX를 미리 모아 좌표 압축한다. 압축된 값 위에 다음 두 펜윅 트리를 유지한다.

  • 각 값의 현재 등장 횟수
  • 각 값이 현재 만드는 합

삽입과 삭제는 두 트리의 한 위치를 갱신한다. 현재 DDD보다 큰 값들의 개수와 합은 upper_bound와 두 펜윅 트리의 접미 구간 합으로 구한다.

각 쿼리의 시간 복잡도는 O(log⁡Q)O(\log Q)O(logQ)이고, 전체 시간 복잡도는 O(Qlog⁡Q)O(Q\log Q)O(QlogQ)이다. 메모리 복잡도는 O(Q)O(Q)O(Q)이다.

p
i​
+
D
j=0j=0
j=0
j=Kj=Kj=K
i
​
−
D)=
Ai​>D∑​Ai​−
D⋅
#{i:
Ai​>
D}