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

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

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

Dadas and Queries

返回题目

题解

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)
    ​
    )
    ,
    ​
    )
    ,
    )
    ,
    )