尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

##题解##洛谷P1578##最大子矩形 扫描线法

##题解##洛谷P1578##最大子矩形 扫描线法
📅 发布时间:2026/6/19 21:40:09

[传送门](P1578 [WC2002] 奶牛浴场 - 洛谷)

题意概述

在矩形里放置若干障碍点,求各边平行于原矩形的最大子矩形(子矩形不包含障碍点)

分析

1. 最大子矩形容易想到悬链线方法,然而时间复杂度O(LW) L,W均为3*1e4大小,会超时。

  1. 我们注意到障碍点n的个数只有5000,于是我们通过枚举障碍点的方法枚举极大子矩形,再找出最大子矩形。

参考wzk《浅谈用极大化思想解决最大子矩形问题》

算法实现

将整个矩形四个顶点加入障碍点集合

双指针枚举横坐标,得到双障碍点组

以双障碍点组为左右边界,确定上下边界,找到极大子矩形

流程如图

代码实现

#include<bits/stdc++.h>
using namespace std;
int read()
{int sum = 0, f = 1;char c = getchar();while (c< '0' or c>'9'){if (c == '-')f = -1;c = getchar();}while (c >= '0' and c <= '9'){sum = (sum << 1) + (sum << 3) + c - '0';c = getchar();}return sum * f;
}struct S
{int x, y;
} s[5010];bool cmp1(S a, S b)
{if (a.x != b.x) return a.x < b.x;else return a.y < b.y;
}bool cmp2(S a, S b)
{if (a.y != b.y) return a.y < b.y;else return a.x < b.x;
}int l, w, n, ans;int main()
{l = read(), w = read(), n = read();for (int i = 1; i <= n; i++)s[i].x = read(), s[i].y = read();s[++ n].x = 0, s[n].y = 0; //将四个顶点设为障碍点s[++ n].x = 0, s[n].y = w;s[++ n].x = l, s[n].y = 0;s[++ n].x = l, s[n].y = w;int x1, x2, y1, y2;
//从左往右sort(s + 1, s + 1 + n, cmp1);for (int i = 1; i <= n; i++){x1 = s[i].x, y1 = 0, y2 = w;for (int j = i + 1; j <= n; j++){x2 = s[j].x;ans = max(ans, (x2 - x1) * (y2 - y1));if (s[j].y < s[i].y) y1 = max(y1, s[j].y);else y2 = min(y2, s[j].y);}}
//从右往左for (int i = n; i >= 1; i--){x1 = s[i].x, y1 = 0, y2 = w;for (int j = i - 1; j >= 1; j--){x2 = s[j].x;ans = max(ans, (x2 - x1) * (y2 - y1));if (s[j].y < s[i].y) y1 = max(y1, s[j].y);else y2 = min(y2, s[j].y);}}
//从下往上,以整个矩形边界为极大子矩形的边sort(s + 1, s + n + 1, cmp2);for (int i = 1; i <= n - 1; i++)ans = max(ans, l * (s[i + 1].y) - s[i].y);printf("%d", ans);
}

Trick/错误总结

  1. 快读

  2. 最大子矩形扫描线法:O(S)

  3. 最大子矩形悬线法:O(MN)

相关新闻

  • 【Azure Developer】azd 安装最新版无法登录中国区问题二:本地Windows环境遇问题
  • Mac 下载 VMware 11.1.0-1.dmg 后如何安装?超简单教程(附安装包)
  • 在R中生成交互地图leaflet包

最新新闻

  • Awesome-AI 开源仓库架构设计与技术学习路线工程化沉淀方案
  • (2026新)珠海正规防水补漏公司口碑榜TOP5权威推荐!卫生间/厨房/阳台/屋顶/天花板/地下室渗漏水检测维修攻略-靠谱漏水检测维修师傅推荐 - 安佳防水
  • 深入解析CAN总线标识符过滤:原理、配置与MSCAN实战指南
  • 终极指南:跨平台获取macOS系统镜像的完整解决方案
  • 深入解析MC68HC908AS32A SPI模块:从寄存器配置到中断与错误处理实战
  • CANN/ops-math Mod取模算子

日新闻

  • 信任的进化:技术实现详解——如何用JavaScript构建博弈论模拟器
  • Terrakube自定义工作流:如何集成OPA、Infracost等工具扩展IaC能力
  • grunt-concurrent快速入门:5分钟学会并行运行Grunt任务

周新闻

  • 3步解锁iOS设备:applera1n激活锁绕过完全指南
  • 39 2026 人工智能证书终极盘点,普通人选 AI 证书可以从这些方向入手
  • Redis 暴露公网有多危险?从端口检查到补救步骤

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号