「杂题乱刷2」at_abc365_f

题目链接

at_abc365_f

解题思路

根号分治。

首先有一个显然的贪心,就是能往右走,是一定要往右走的,而剩下的情况,若我们在最高点的上面,那么一直往下走直到可以往右走是最优的,若我们在最低点的下面,那么一直往上走直到可以往右走是最优的。

于是我们就有了 \(O(nq)\) 的做法。

设阙值为 \(B\),需要行走的横距离小于等于 \(B\) 的询问直接暴力做即可。

对于剩余的情况,我们可以直接预处理 \(f1_{i,0/1}\) 表示第 \(i\) 格的最上/下方到达 \(i + \sqrt{n}\) 格时所需的最少的步数,\(f1_{i,0/1}\) 表示第 \(i\) 格的最上/下方到达 \(i + \sqrt{n}\) 格时所需的最少的步数最终到达的点。

于是对于一开始,我们可以直接使用线段树 + 二分的方式来找到第一个不能直接往右走的点,之后走 \(\sqrt{n}\) 格后再次进行二分,这样循环往复地进行操作即可。

时间复杂度 \(O(n \sqrt{n} \log n)\)

posted @ 2024-08-04 08:25  wangmarui  阅读(19)  评论(0编辑  收藏  举报