Kimi    LeetCode 3454. 分割正方形 II C++实现
这是 LeetCode 3454. 分割正方形 II 的 C 实现基于扫描线 线段树算法。核心思路题目要求找到一条水平线 y k使得该线以上和以下的正方形并集面积相等。由于正方形可能重叠需要使用扫描线算法1. 离散化 x 坐标收集所有正方形的左右边界 x 值2. 扫描线事件每个正方形产生两个事件——下边界加入k1和上边界移除k-13. 线段树维护覆盖长度在 y 轴上扫描时用线段树维护当前 y 层被覆盖的 x 轴总长度去重后的并集长度4. 两次扫描第一次计算总面积第二次找到面积恰好为一半时的 y 坐标复杂度- 时间复杂度O(n log n)其中 n 为正方形数量- 空间复杂度O(n)C 代码cppclass Solution {public:double separateSquares(vectorvectorint squares) {unordered_setlong long xs_set;vectortupleint, long long, long long, int events;for (auto sq : squares) {long long x sq[0], y sq[1], l sq[2];long long x2 x l, y2 y l;xs_set.insert(x);xs_set.insert(x2);events.emplace_back(y, x, x2, 1);events.emplace_back(y2, x, x2, -1);}sort(events.begin(), events.end());vectorlong long xs(xs_set.begin(), xs_set.end());sort(xs.begin(), xs.end());int n xs.size();// 离散化映射unordered_maplong long, int mp;for (int i 0; i n; i) mp[xs[i]] i;// 线段树struct SegTree {vectorint cnt;vectorlong long len;vectorlong long xs;SegTree(vectorlong long xs) : xs(xs) {int size xs.size() * 4;cnt.resize(size);len.resize(size);}void update(int u, int l, int r, int cl, int cr, int k) {if (cl r || cr l) return;if (cl l r cr) {cnt[u] k;} else {int mid (l r) 1;update(u 1, l, mid, cl, cr, k);update(u 1 | 1, mid 1, r, cl, cr, k);}if (cnt[u] 0) {len[u] xs[r 1] - xs[l];} else if (l r) {len[u] 0;} else {len[u] len[u 1] len[u 1 | 1];}}};SegTree tree(xs);double area 0;int prev_y 0;// 第一次扫描计算总面积for (auto [y, x1, x2, k] : events) {area (double)(y - prev_y) * tree.len[1];int l mp[x1], r mp[x2];if (l r) tree.update(1, 0, n - 2, l, r - 1, k);prev_y y;}double target area / 2.0;area 0;prev_y 0;// 重建线段树第二次扫描SegTree tree2(xs);for (auto [y, x1, x2, k] : events) {double cur_len tree2.len[1];double t (double)(y - prev_y) * cur_len;if (area t target) {return (double)prev_y (target - area) / cur_len;}area t;int l mp[x1], r mp[x2];if (l r) tree2.update(1, 0, n - 2, l, r - 1, k);prev_y y;}return 0.0;}};关键细节- 线段树区间表示xs 存储离散化后的 x 坐标len[u] 管理区间 [xs[l], xs[r1])。update 中的 pushup 逻辑若 cnt[u] 0则该区间被完全覆盖长度为 xs[r1] - xs[l]否则合并子节点- 区间更新对于正方形 [x1, x2)在线段树中更新索引范围 [l, r-1]因为 xs 存储的是区间端点线段树叶子节点对应相邻端点之间的区间- 两次扫描第一次求总面积 area第二次在扫描过程中累加面积当累加值达到 area/2 时用线性插值计算精确的 y 坐标下载文件

相关新闻

Java SHA256加密实战:从原理到密码存储与API签名的完整指南

Java SHA256加密实战:从原理到密码存储与API签名的完整指南

1. 项目概述:为什么我们需要SHA256? 在开发中,处理敏感数据是家常便饭,无论是用户密码、支付凭证还是API签名。直接存储明文密码是开发中的大忌,一旦数据库泄露,后果不堪设想。因此,我们必须对这…

2026/7/4 3:51:58 阅读更多 →
数据产业服务分类(25)——数据要素——数据要素转化的主体

数据产业服务分类(25)——数据要素——数据要素转化的主体

人是数据要素与其他生产要素转化的核心与主体。实践活动是纽带数据与现实世界并非彼此割裂、独立存在,而是通过人类实践活动这一关键纽带实现了紧密相连。人类实践活动充当着数据与现实世界连接的桥梁。人类在现实世界中开展各类实践活动,这些活动产生了…

2026/7/4 3:49:58 阅读更多 →
揭秘租赁行业潜规则:为什么大厂都在租翻新打印机?

揭秘租赁行业潜规则:为什么大厂都在租翻新打印机?

很多人好奇,为什么大型企业、连锁公司、上市公司,明明有预算,却偏偏不租新机,反而首选翻新打印机?今天揭秘租赁行业没人说的真话。一、大厂只看实用性,不看面子对专业企业来说,打印机只是办公工…

2026/7/4 3:49:58 阅读更多 →

最新新闻

Windows平台Appium 2.0自动化测试环境搭建与真机连接实战指南

Windows平台Appium 2.0自动化测试环境搭建与真机连接实战指南

1. 项目概述与核心价值如果你是一名移动端测试工程师、自动化开发或者对手机应用自动化感兴趣的技术爱好者,那么“在Windows上搭建一套完整的Appium 2.0 Android SDK环境,并成功连接真机”这件事,大概率是你职业生涯中绕不开的“第一道坎”。…

2026/7/4 4:52:21 阅读更多 →
PM的游戏思维

PM的游戏思维

游戏思维:拥抱挑战,转化低估不怕事的思维,还有个关键,就是游戏心态。人生本来就是来体验的,项目管理亦是,就像游戏一样,没必要内耗。每一次挫折都是升级打怪,每个难题都是通关的谜题…

2026/7/4 4:52:21 阅读更多 →
Java计算机毕设之智能化商超收银折扣核算管理系统的设计与实现 基于 SpringBoot 的商场动态折扣更新管理系统(完整前后端代码+说明文档+LW,调试定制等)

Java计算机毕设之智能化商超收银折扣核算管理系统的设计与实现 基于 SpringBoot 的商场动态折扣更新管理系统(完整前后端代码+说明文档+LW,调试定制等)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

2026/7/4 4:50:20 阅读更多 →
文心5.0高分低能?真实业务场景下的能力压力测试报告

文心5.0高分低能?真实业务场景下的能力压力测试报告

1. 项目概述:一场关于大模型能力边界的务实讨论“文心5.0正式版是不是高分低能?”——这句话在技术社区、产品团队和内容创作者圈子里,最近两个月被反复提起。它不是一句情绪化吐槽,而是一个带着实测数据、业务反馈和落地卡点的真…

2026/7/4 4:48:20 阅读更多 →
PCB阻抗设计实战:基于嘉立创480种叠层模板的4层板50Ω单端线宽计算

PCB阻抗设计实战:基于嘉立创480种叠层模板的4层板50Ω单端线宽计算

PCB阻抗设计实战:基于嘉立创480种叠层模板的4层板50Ω单端线宽计算在高速PCB设计中,阻抗控制是确保信号完整性的关键因素。随着信号频率的不断提升,传统的"连通即可"布线理念已无法满足现代电子产品的需求。本文将聚焦如何利用嘉立…

2026/7/4 4:46:19 阅读更多 →
当Source引擎遇上Blender:如何让游戏资源在3D创作中重生?

当Source引擎遇上Blender:如何让游戏资源在3D创作中重生?

当Source引擎遇上Blender:如何让游戏资源在3D创作中重生? 【免费下载链接】SourceIO SourceIO is an Blender(4.0) addon for importing source engine textures/models/maps 项目地址: https://gitcode.com/gh_mirrors/so/SourceIO 你是否曾经面…

2026/7/4 4:44:18 阅读更多 →

日新闻

Memcached 1.6.43 发布:关键安全修复版本,多项问题得到解决

Memcached 1.6.43 发布:关键安全修复版本,多项问题得到解决

Memcached 1.6.43 正式发布,这是一个关键的安全修复版本,修复了多个方面的问题,还对部分功能进行了优化。 安全修复亮点 此次发布在安全修复上表现突出。binprot 避免了项目引用计数溢出,mcmc 因安全问题提升了上游版本号&#xf…

2026/7/4 0:04:29 阅读更多 →
终极指南:使用HMCL启动器跨平台畅玩Minecraft的完整解决方案

终极指南:使用HMCL启动器跨平台畅玩Minecraft的完整解决方案

终极指南:使用HMCL启动器跨平台畅玩Minecraft的完整解决方案 【免费下载链接】HMCL A Minecraft Launcher which is multi-functional, cross-platform and popular 项目地址: https://gitcode.com/gh_mirrors/hm/HMCL HMCL(Hello Minecraft! Lau…

2026/7/4 0:06:29 阅读更多 →
KMX63与PIC18F66K40在嵌入式HMI中的硬件协同与低功耗设计

KMX63与PIC18F66K40在嵌入式HMI中的硬件协同与低功耗设计

1. KMX63与PIC18F66K40的硬件协同架构解析KMX63作为一款三轴加速度计和磁力计组合传感器,与PIC18F66K40微控制器的搭配堪称嵌入式HMI开发的黄金组合。这套硬件组合的核心优势在于KMX63提供的高精度运动感知能力与PIC18F66K40强大的信号处理能力形成了完美互补。KMX6…

2026/7/4 0:06:29 阅读更多 →

周新闻

月新闻