[集训队互测 2014] RDWAD 题解

赛时行向量开头的线段树 push_up 矩阵乘写反了,100→0100\to 01000。。。

题意

给定 A[1,n]A_{[1,n]}A[1,n],满足 Ai∈{ −1,0,1}A_i\in \{-1,0,1\}Ai{ 1,0,1}mmm 次操作:

  1. 0 x y:令 Ax→yA_x\to yAxy,满足 y∈{ −1,0,1}y\in \{-1,0,1\}y{ 1,0,1}
  2. 1 x y:定义一次操作为 Ai→Ai+Ai−1(x<i≤y)A_i\to A_i+A_{i-1}(x<i\leq y)AiAi+Ai1(x<iy),计算最少多少次操作可以使 A[x,y]A_{[x,y]}A[x,y] 非严格单调递增,无法满足输出 −1-11

1≤n,m≤1061\leq n,m\leq 10^61n,m106


题目条件是非严格单调递增,非严格单调递增的操作次数显然优于严格,所以我们大胆猜测修改后的序列 Bi∈{ −1,0,1}B_i\in \{-1,0,1\}Bi{ 1,0,1}(实际上很显然)。然后我们就可以 DP 了。

状态定义:令 fi,0/1/2f_{i,0/1/2}fi,0/1/2 表示前 iii 项已经非严格单调递增且第 iii 项的取值为 −1/0/1-1/0/11/0/1 的最小操作次数。先考虑初始化,显然是 f1,a1+1=0f_{1,a_1+1}=0f1,a1+1=0,剩余 fff∞\infty。然后我们对 AiA_iAi 的原始取值分类讨论:

  1. Ai=0A_i=0Ai=0:此时想让 AiA_iA
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值