20220331刷题日记
P7207
注意到我们从 m 开始增量,设 x 是最小的满足 x&(n−1)=n−1 的值,那么 [m,x] 和 [l,n−1] 按照顺序一一对应是满足条件的,证明放在最后。这样的话剩下的是一个子问题,用双指针可以 O(n)。
设 i 是满足 m 中是 0 而 n−1 中是 1 的最高位,那么我们增量去做,一定是直到 i 和比 i 小的位都相同的时候才停止,那么我们从这里开始减 1,不难发现只对 i 后面的位有影响,所以是可以成立的。
P5307
首先 fi,j,k 是显然的 dp,其中第三维是 106 的,但是我们发现其实并没有非常多我们用得着的状态,我们考虑设 fr,s,n,计算这个东西我们只需要知道 fr−1,s,n\ar,s,fr,s−1,n\ar,s 对,关注到第三维只有 √n 种选择。所以整个复杂度被优化到了 rs√n。
CF868F
首先列出 dp 式子。然后发现只能尝试四边形不等式,发现满足,于是考虑分治或者是二分栈。二分栈显然不是一个很好的选择,因为我们同样难以计算 w(i,j),于是我们考虑分治。一个比较巧妙的想法是我们按照莫队那样的做法去更新我们的区间,发现分治每一层都是 O(n),于是复杂度有保证。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步