专栏文章

小圆抱抱 | 【题解】P11833 [省选联考 2025] 推箱子

P11833题解参与者 6已保存评论 5

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
5 条
当前快照
1 份
快照标识符
@miq2twkh
此快照首次捕获于
2025/12/03 22:02
3 个月前
此快照最后确认于
2025/12/03 22:02
3 个月前
查看原文
赛时第一反应是什么都不会,然后瞎写了个暴力过了所有样例,得到了下述观察。
观察
对于两个要求 i,ji,j,若 titjt_i\le t_j,则应当先满足要求 ii,再满足要求 jj
证明
ii 操作不会影响到 jj,则是简单的:设 ii 操作用时 aajj 操作用时 bb,显然 atia+btja\le t_i\land a+b\le t_ja+btibtja+b\le t_i\land b\le t_j 更易满足。
否则将 jj 移动到不会被 ii 影响的位置(容易证明这一定让它离目标点更近了),转化成上述情况。 \square
基于上述观察,不难写出暴力:维护一个全局的时间戳 curcur,每次要将 ii 移动到 bib_i 时,检查 i+1i+1 的位置是否 >bi\gt b_i(或者 i1i-1 的位置 <bi\lt b_i),如果是的话就直接操作;否则先递归将 i+1i+1 移动到 bi+1b_i+1i1i-1 同理),再移动 ii。这样是 O(n2)\mathcal{O}(n^2) 的。
观察到暴力之所以慢,是因为每次可能将连续的一长段做了平移。(我们称 iii+1i+1 是连续的,当且仅当它们位置绝对值相差为 11。)
于是使用 ODT 维护连续段即可。每次移动的时候至多分裂一次,然后暴力往后(前)找下一段是否被影响了。这样这些所有被暴力找到的段会被合并称一段,所以复杂度是 Θ(nlogn)\Theta(n\log n)
小圆抱抱/kel

评论

5 条评论,欢迎与作者交流。

正在加载评论...