[WC/CTS2023] 楼梯:用套路思维地解决思维题

· · 题解

这题要是想到“考虑右下边界”,就很容易了。可惜,想到这一点是很不容易也不”套路“的,至少我没想到。

然而,我们仍然能套路地,不需要任何思维火花地,解决本题。这也是本题解讲述的重点。

读完题,最让人迷惑的就是 qp 的因数这个条件。所以,本题肯定要在这个条件上做文章。

接下来,我们考虑一些老生常谈的”思维技巧“,看能否套到这题上来。

综上,我们通过运用”思维技巧“,在每一步思考都有迹可循、没有让人大呼妙而摸不着头脑的步骤的前提下,发现了一个非常有趣的结论。

有了最终结论,本题就很容易了。设 u=p/q,则运用结论可以设计一个二分算法:我们每次要么找到一个边界长度为 \lceil u/2\rceil\cdot q 的子楼梯,要么找到一个边界长度为 \lfloor u/2\rfloor\cdot q 的子楼梯,递归 O(\log V) 层后就找到了边界长度为 q 的子楼梯。

上述过程都只需要维护每行的格子数和线段树上二分,而线段树的所有操作都是严格的,所以直接就可以可持久化。如果事先离散化,时间复杂度为 O(m\log m\log V)