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

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

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

네모네모 해결하기

문제로 돌아가기

해설

현재 수열의 길이를 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}