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
首先 \(f_{i,j,k}\) 是显然的 dp,其中第三维是 \(10^6\) 的,但是我们发现其实并没有非常多我们用得着的状态,我们考虑设 \(f_{r,s,n}\),计算这个东西我们只需要知道 \(f_{r-1,s,\frac{n}{\a_{r,s}}},f_{r,s-1,\frac{n}{\a_{r,s}}}\) 对,关注到第三维只有 \(\sqrt{n}\) 种选择。所以整个复杂度被优化到了 \(rs\sqrt{n}\)。
CF868F
首先列出 dp 式子。然后发现只能尝试四边形不等式,发现满足,于是考虑分治或者是二分栈。二分栈显然不是一个很好的选择,因为我们同样难以计算 \(w(i,j)\),于是我们考虑分治。一个比较巧妙的想法是我们按照莫队那样的做法去更新我们的区间,发现分治每一层都是 \(O(n)\),于是复杂度有保证。