P5469 [NOI2019] 机器人 题解

P5469 [NOI2019] 机器人 题解

分析最右侧的最大值的位置,发现当 \(n\) 为偶数时只能在中间两个位置,当 \(n\) 为奇数时只能在中间三个位置。可以 DP,设 \(f_{l,r,i}\) 表示 \([l,r]\) 的最大值小于等于 \(i\) 的方案数,枚举最右侧最大值在 \(x\),从 \(f_{l,x-1,i}\)\(f_{x+1,r,i-1}\) 转移。因为 \(x\) 的位置特殊,猜想有用的 \([l,r]\) 不会很多,打表发现只有 \(2000+\) 个。直接做计算量 \(2000\times \max B_i\),可以获得 \(50\) 分。

考虑以 \(a_i,b_i+1\) 把值域分成左闭右开的连续段,那么猜想每一段都是一个多项式。具体来说,考虑 \(l=r\) 时,每一段是一次函数。由于 \(f\) 的转移是两边的 \(f\) 乘起来,再求前缀和,求前缀和对次数没有影响,所以 \([l,r]\) 的每一段都是 \((r-l+1)\) 次多项式。因此可以对每段都求出前 \((r-l+2)\) 个值,需要求某个位置值时可以 \(O(r-l)\) 拉插。

分析复杂度大概是

\[\sum (r-l)^3 \]

这个东西的实际上是 \(O(n^3)\) 量级的。可以通过。

posted @ 2025-09-29 21:00  dengchengyu  阅读(8)  评论(0)    收藏  举报