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

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

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

다다스와 쿼리

문제로 돌아가기

해설

A0=U0=V0=0A_0=U_0=V_0=0A0​=U0​=V0​=0으로 둔다. 위치 iii를 덮고 있는 크기 111의 시행 수를 UiU_iUi​, 크기 XXX의 시행 수를 ViV_iVi​라고 하자. 그러면

Ui+XVi=AiU_i+XV_i=A_iUi​+XVi​=Ai​

이며 Ui,ViU_i,V_iUi​,Vi​는 음이 아닌 정수이다.

고정된 두 수열 U,VU,VU,V를 만드는 데 필요한 시행 수는

∑i=1Nmax⁡(0,Ui−Ui−1)+∑i=1Nmax⁡(0,Vi−Vi−1)\sum_{i=1}^{N}\max(0,U_i-U_{i-1})+\sum_{i=1}^{N}\max(0,V_i-V_{i-1})i=1∑N​max(0,U

이다. 증가한 만큼 새 구간을 시작하고, 감소한 만큼 기존 구간을 끝내면 이 값을 달성할 수 있다.

Fi(c)F_i(c)Fi​(c)를 111번부터 iii번 위치까지 만들었고 Vi=cV_i=cV일 때의 최소 비용이라고 하자. 이고 이전 상태가 라면 에 대한 전이 비용은

hΔi(e)=max⁡(0,Δi−Xe)+max⁡(0,e)h_{\Delta_i}(e)=\max(0,\Delta_i-Xe)+\max(0,e)hΔi​​(e)=max(0,Δ

이다. 또한 0≤c≤⌊Ai/X⌋0\le c\le\lfloor A_i/X\rfloor0≤c≤⌊Ai​/X⌋이어야 한다. 따라서 FiF_iFi​는 정수 이산 볼록 함수이다.

정수 이산 볼록 함수 fff의 켤레 함수를

f∗(s)=max⁡z(sz−f(z))f^*(s)=\max_z(sz-f(z))f∗(s)=zmax​(sz−f(z))

로 정의한다. 1≤j≤X+11\le j\le X+11≤j≤X+1에 대해

Dj(f)=f∗(−X+j)−f∗(−X+j−1)D_j(f)=f^*(-X+j)-f^*(-X+j-1)Dj​(f)=f∗(−X+j

로 둔다. Dj(f)D_j(f)Dj​(f)는 기울기 −X+j-X+j−X+j에서의 가장 작은 최적 위치이다.

다음 성질을 사용한다.

  • infimal convolution에서는 켤레 함수가 더해진다. 따라서 DjD_jDj​도 더해진다.
  • 함수의 정의역을 정수 구간 [0,q][0,q][0,q]로 제한하면 DjD_jDj​는 가 된다.

Δ=Xq+r\Delta=Xq+rΔ=Xq+r (0≤r<X0\le r<X0≤r<X)로 둔다. dj(Δ)=Dj(hΔ)d_j(\Delta)=D_j(h_\Delta)는 다음과 같다.

Δ≥0\Delta\ge0Δ≥0이면

d1=0,dj=q+[r≥X−j+2](2≤j≤X+1).d_1=0,\qquad d_j=q+[r\ge X-j+2]\quad(2\le j\le X+1).d1​=0,dj​=

Δ<0\Delta<0Δ<0이면

dj=q+[r≥X−j+1](1≤j≤X),dX+1=0.d_j=q+[r\ge X-j+1]\quad(1\le j\le X),\qquad d_{X+1}=0.dj​=q+[r≥X−

여기서 대괄호는 조건이 참이면 111, 거짓이면 000이다. 이 식은 hΔ(e)−(−X+j)eh_\Delta(e)-(-X+j)ehΔ​(e)−(−X+j의 이산 기울기를 조사하여 얻을 수 있다.

zj=Dj(Fi−1)+dj(Δi)z_j=D_j(F_{i-1})+d_j(\Delta_i)zj​=Dj​(F라고 하자. 일 때

Dj(Fi)=clamp⁡(zj,0,qi)D_j(F_i)=\operatorname{clamp}(z_j,0,q_i)Dj​(Fi​)=clamp(z

이다. 또한 αi=Fi∗(−X)\alpha_i=F_i^*(-X)αi​=Fi∗​(−X)라 두면

αi=αi−1−Δi+∑j=1X+1min⁡(zj,0)\alpha_i=\alpha_{i-1}-\Delta_i+\sum_{j=1}^{X+1}\min(z_j,0)αi​=αi−1​−

이다.

항상 D1(Fi)=0D_1(F_i)=0D1​(Fi​)=0, DX+1(Fi)=qiD_{X+1}(F_i)=q_iD이며 상태가 에 더하는 값은 항상 이다. 따라서 의 개 상태만 저장하면 된다. 상태가 에 더하는 값은 각 위치의 상수항에 합칠 수 있다.

이제 하나의 상태 jjj를 고정하자. 한 위치는 입력 상태 xxx를

y=clamp⁡(x+d,0,q)y=\operatorname{clamp}(x+d,0,q)y=clamp(x+d,0,q)

로 바꾸고, α\alphaα에 min⁡(x+d,0)\min(x+d,0)min(x+d,0)을 더한다.

연속한 구간의 효과는 다음 다섯 정수로 표현할 수 있다.

y=clamp⁡(x+a,l,r),t=min⁡(x+p,c).y=\operatorname{clamp}(x+a,l,r),\qquad t=\min(x+p,c).y=clamp(x+a,l,r),t=min(x+

여기서 ttt는 이 구간이 α\alphaα에 더하는 값이다. 한 위치의 요약은

(a,l,r,p,c)=(d,0,q,d,0)(a,l,r,p,c)=(d,0,q,d,0)(a,l,r,p,c)=(d,0,q,d,0)

이다.

왼쪽 요약을 (a1,l1,r1,p1,c1)(a_1,l_1,r_1,p_1,c_1)(a1​,l1​,r1​,, 오른쪽 요약을 라고 하자. 왼쪽 다음에 오른쪽을 적용한 요약은

a=a1+a2,l=clamp⁡(l1+a2,l2,r2),r=clamp⁡(r1+a2,l2,r2),p=p1+min⁡(l1+p2,c2),c=

이다. 각 상태를 독립적으로 합칠 수 있으므로 세그먼트 트리 노드의 병합에는 O(X)O(X)O(X)의 시간이 든다.

루트에서 입력 상태는 모두 000이다. 각 상태의 최종값은 clamp⁡(a,l,r)\operatorname{clamp}(a,l,r)clamp(a,l,r)이고, α\alphaα에 더해지는 값은 min⁡(p,c)\min(p,c)min(p,c)이다. 마지막으로

min⁡cFN(c)=−FN∗(0)=−(αN+∑j=2XDj(FN))\min_c F_N(c)=-F_N^*(0)=-\left(\alpha_N+\sum_{j=2}^{X}D_j(F_N)\right)cmin​FN​(c)=

를 출력한다.

모든 쿼리를 먼저 읽는다. 쿼리에서 한 번이라도 갱신되는 위치를 ppp라고 하면 바뀔 수 있는 전이는 ppp번과 p+1p+1p+1번뿐이다. 이 전이들의 위치 집합을 SSS라고 하자. ∣S∣≤2Q|S|\le2Q∣S∣≤이다.

SSS에 속하지 않는 위치는 모든 쿼리 동안 변하지 않는다. 이러한 위치의 각 최대 연속 구간을 처음에 하나의 요약으로 합친다. SSS의 각 위치는 길이 111인 요약으로 둔다. 이렇게 만든 압축 수열의 길이를 KKK라고 하면

K≤2∣S∣+1≤4Q+1K\le2|S|+1\le4Q+1K≤2∣S∣+1≤4Q+1

이다. 압축 수열 위에 세그먼트 트리를 만든다. 한 번의 업데이트에서는 ppp번과 p+1p+1p+1번에 대응하는 압축 리프만 다시 만든다.

전처리 시간 복잡도는 O(X(N+Q)+Qlog⁡Q)O(X(N+Q)+Q\log Q)O(X(N+Q)+QlogQ)이고, 쿼리당 시간 복잡도는 O(Xlog⁡Q)O(X\log Q)O(XlogQ)이다. 메모리 복잡도는 이다.

Solution written by GPT5

i​
−
Ui−1​)+
i=1∑N​max(0,Vi​−
Vi−1​)
i
​
=
c
Δi=Ai−Ai−1\Delta_i=A_i-A_{i-1}Δi​=Ai​−Ai−1​
ddd
e=c−de=c-de=c−d
i​
−
Xe)+
max(0,e)
)
−
f∗(−X+
j−
1)
clamp⁡(Dj,0,q)\operatorname{clamp}(D_j,0,q)clamp(Dj​,0,q)
  • hΔ∗(−X)=−Δh_\Delta^*(-X)=-\DeltahΔ∗​(−X)=−Δ이다.
  • dj​(Δ)=
    Dj​(hΔ​)
    q
    +
    [r≥
    X−
    j+
    2](2≤
    j≤
    X+
    1).
    j
    +
    1](1≤
    j≤
    X),dX+1​=
    0.
    )
    e
    i
    −
    1
    ​
    )
    +
    dj​(Δi​)
    qi=⌊Ai/X⌋q_i=\lfloor A_i/X\rfloorqi​=⌊Ai​/X⌋
    j
    ​
    ,
    0
    ,
    qi​
    )
    Δi​
    +
    j=1∑X+1​min(zj​,0)
    X+1​
    (
    Fi​
    )
    =
    qi​
    j=X+1j=X+1j=X+1
    α\alphaα
    000
    j=2,3,⋯ ,Xj=2,3,\cdots,Xj=2,3,⋯,X
    X−1X-1X−1
    j=1j=1j=1
    α\alphaα
    p
    ,
    c
    )
    .
    p1​
    ,
    c1​
    )
    (a2,l2,r2,p2,c2)(a_2,l_2,r_2,p_2,c_2)(a2​,l2​,r2​,p2​,c2​)
    c1+min⁡(r1+p2,c2)\begin{align*} a&=a_1+a_2,\\ l&=\operatorname{clamp}(l_1+a_2,l_2,r_2),\\ r&=\operatorname{clamp}(r_1+a_2,l_2,r_2),\\ p&=p_1+\min(l_1+p_2,c_2),\\ c&=c_1+\min(r_1+p_2,c_2) \end{align*}
    alrpc​=a1​+a2​,=clamp(l1​+a2​,l2​,r2=clamp(r1​+a2​,l2​,r2=p1​+min(l1​+p2​,c2​=c1​+min(r1​+p2​,c2​​
    −FN∗​(0)=
    −(αN​+j=2∑X​Dj​(FN​))
    2Q
    O(N+Q+XQ)O(N+Q+XQ)
    O(N+Q+XQ)
    ​
    )
    ,
    ​
    )
    ,
    )
    ,
    )