「JOISC 2022 Day4」鱼 2
2022/4/15 23:18:00
本文主要是介绍「JOISC 2022 Day4」鱼 2,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
考虑怎么样的鱼能取得最后的胜利,它一定是不断贪心地往两边吃,能吃就吃。
实现以上过程的一个朴素想法是,对左右两边分别维护”有效“单调栈,暴力扫一遍。
考虑用线段树维护上述过程,思考如何合并区间信息。
假设有 \(x\) 条鱼能在左子树中吃完所有的鱼,那么加入右区间后,它们的增广方向一定是单向的。
这时候发现需要分别维护区间从左和从右开始的“有效”单调栈,也就是维护从左端点或右端点开始吃,在哪些点会停下的栈。
那么就可以快速判断能吃光原区间的鱼能否在新区间依然取得成功。
可以发现栈大小最多为 \(\log_2V\) 个,因为每次跨过障碍后数值至少乘 \(2\)。
还有一种情况是在原区间并不能成功,但是在新区间时通过吃掉另一个区间的一些鱼而取得成功。
首先如果它吃不到另一个区间那么它就永远不可能吃掉全部。
那么只需考虑能吃掉一段前缀或是后缀的位置,把这些都记在它们第一个不能吃到的位置上。可以发现这些位置都在“有效”单调栈上。
接着考虑如何判断能否成为答案。
可以发现能成功的点构成一个前/后缀,那么一个朴素的想法是二分这个位置暴力判断,时间复杂度为 \(\mathcal O(N\log_2 N\log_2V\log\log_2V)\)。
进一步分析可以发现,从小到大枚举若失败则从断点开始继续走,这样合并区间信息的复杂度就是 \(\mathcal O(\log_2V)\)。
总时间复杂度为 \(\mathcal O(N\log_2V\log_2N)\)
这篇关于「JOISC 2022 Day4」鱼 2的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-04-26高性能表格工具VTable总体构成-icode9专业技术文章分享
- 2024-04-16软路由代理问题, tg 无法代理问题-icode9专业技术文章分享
- 2024-04-16程序猿用什么锅-icode9专业技术文章分享
- 2024-04-16自建 NAS 的方案-icode9专业技术文章分享
- 2024-04-14ansible 在远程主机上执行脚本,并传入参数-icode9专业技术文章分享
- 2024-04-14ansible 在远程主机上执行脚本,并传入参数, 加上remote_src: yes 配置-icode9专业技术文章分享
- 2024-04-14ansible 检测远程主机的8080端口,如果关闭,则echo 进程已关闭-icode9专业技术文章分享
- 2024-04-14result 成功怎么写-icode9专业技术文章分享
- 2024-04-14stopped 状态设置为变量,由外部传递进来-icode9专业技术文章分享
- 2024-04-14为什么ansible执行远程脚本需要放到后台-icode9专业技术文章分享