对于区间 \([1,i]\) 的划分方案,划分长度一定是 \(i\) 的因数,因此考虑暴力枚举区间长度。
问题转化为快速 check 一段区间是不是美丽的。
首先,区间内的 \(-1\) 一定要么全部变成左边的第一个非 \(-1\) 值,要么全部变成右边的第一个。这样就处理掉了所有的 \(-1\),只需要考虑确定的值了。
考虑利用 st 表求出区间内最大值的位置,再用两个 st 表维护差分序列,check 两边是否是单调的。单次 check 的复杂度就做到了 \(O(1)\)。
总复杂度 \(O(n\log n)\)。
考虑暴力转移,得到方程 \(dp_{i,j}=\min\{dp_{k,j-1}+\max\{a_{k+1}\,\cdots a_i\}\}\)。
考虑优化。设 \(minx_i\) 表示钦定 \(a_i\) 为区间最大值时的最优决策点。维护单调栈,每次 pop 掉一个元素时都对 \(minx_i\) 进行 chkmin。另一种可能是 \(a_i\) 不是最大值,那么需要把它与它左边第一个大于它的位置的 dp 值取 min。
时间复杂度 \(O(n^2)\)。
暴力。
设 \(dp_{i,j}\) 表示前 \(i\) 个按键,第 \(i\) 个按键为 \(j\) 的方案数。
那么 \(dp_{i,j}\) 能够转移到 \(dp_{k,j+1}\) 就代表 \(t_{i,k}\in[p_j-L,p_j+L]\)。
注意到 \(t\) 具有单调性,因此可以直接二分找到转移区间,然后差分维护。
时间复杂度 \(O(nk\log k)\)。
标签:1.16,题解,复杂度,最大值,模拟,单调,区间,check,dp From: https://www.cnblogs.com/Tarantula/p/1-16-p.html