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)\) 量级的。可以通过。