DOJ logoDOJ
問題
最近追加された問題保存した問題Workbooks
カテゴリDLCコンテストグループチーム掲示板
ランキング
正解数ランキングストリークランキングDOJ Powerランキング
提出状況
問題募集ログイン新規登録
DOJ logoDOJ

OI形式のサブタスク採点、Eloレーティング、Discord認証を備えたオンラインジャッジです。

問題
問題一覧カテゴリ
コミュニティ
コンテストランキング掲示板お知らせ外部のコンテストを開催するガイド
アカウント
ログイン新規登録ジャッジ状態
ポリシー
利用規約DLCの利用規則プライバシーAPI 文書言語ランタイムコンテストの順位報酬レーティングとパフォーマンス
© 2026 DOJ
All rights reserved
解説

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}