
【Alg】 最大子矩形 & 【Sol】 P1578 奶牛浴场

前言
自创的一种题解区最简洁的做法,运用了奇妙的加点操作。
这题是最大子矩形模板题,我用的是障碍点找子矩形。
我在做这题的时候参考了题解区的 这篇题解 ,然后我自己写的时候发现后两种情况可以直接优化掉,于是我的做法就只有一遍排序和遍历。
题解
基本思路
最大子矩形四条边都不能向外拓展,所以说四条边上一定都有至少一个障碍点。
考虑枚举左边界上的障碍点和右边界上的障碍点,然后在枚举过程中维护上下边界。
具体来说:
先对所有按横坐标排序,点固定点
假设我们已经知道了上边界为
维护上下边界也很简单,因为我们是从左往右枚举
形式化的说:若
特殊情况
(1) 上下边界为整个农场的上下边界
每枚举一个
(2) 覆盖农场角落
四个角落各方一个点。
(3) 左右边界为整个农场的左右边界
这里我使用了一种创新性的方法,减少了一次排序和循环遍历。
这样的矩形左右边界上没有点,那我们就考虑在这些矩形的左右边界上放点。
直接把边界上放满点就会爆炸,考虑怎么放点才能覆盖这样的所有矩形。
这些矩形虽然没有左右边界,那就意味着它一定有上下边界,那我们直接把上下边界上的点往左右边界上放就行了。
具体方法是:在输入一个点
复杂度 & 注意事项
时间复杂度
注意空间开三倍以上,因为我们多加了一些点进去。
代码
丑就丑吧,我也懒得改码风了。
1 |
|
- 标题: 【Alg】 最大子矩形 & 【Sol】 P1578 奶牛浴场
- 作者: Xlon WU
- 创建于 : 2025-05-28 17:30:00
- 更新于 : 2025-06-08 08:43:13
- 链接: https://xlon-wu.top/2025/05/28/solution-luogu-P1578/
- 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。
评论