算法常见题型之前缀和差分区间覆盖进阶:平面圆覆盖
算法常见题型之前缀和差分区间覆盖进阶平面圆覆盖例题https://www.luogu.com.cn/problem/P16684一、题目大意提炼给定nnn个圆心、半径均为整数的圆qqq次询问每次给出一个整数坐标点判断该点被多少个圆覆盖点在圆边界上也算覆盖若覆盖次数为奇数输出Yes区域为彩色若覆盖次数为偶数输出No区域为无色。二、基础回顾一维差分模板核心作用一维差分数组用于批量区间修改 单次前缀和还原可以在O(1)O(1)O(1)时间内给区间 [L,R] 的所有元素统一加上一个值最后通过一次前缀和得到最终数组是处理区间覆盖问题的基础工具。标准模板vectorintd(n2,0);// 差分数组// 给区间[L, R]所有元素加valvoidadd(intL,intR,intval){d[L]val;d[R1]-val;}// 前缀和还原原数组for(inti1;in;i){d[i]d[i-1];}时间复杂度区间修改O(1)O(1)O(1)还原数组O(n)O(n)O(n)三、思路分析从暴力到优化暴力法的局限最朴素的做法每次询问遍历所有nnn个圆通过距离公式判断点是否在圆内。时间复杂度O(q∗n)106∗103109O(q * n) 10^6 *10^3 10^9O(q∗n)106∗103109运算量过大必然超时。突破口坐标范围有限题目中所有坐标均为 1到1000 的整数整个平面只有 1000*1000 1e6 个整数点。我们可以预处理出所有整数点的覆盖次数之后每次询问O(1)O(1)O(1)直接查表适合百万级查询量。进阶思路降维 差分直接逐圆逐点标记覆盖最坏复杂度为 O(n*πr2)3e8依然偏高。利用圆的几何性质优化对任意一个圆固定每一行yyy该行上被圆覆盖的xxx坐标一定是一段连续区间。于是我们可以把二维圆覆盖问题拆解为「每一行上的一维区间加」再用一维差分快速完成区间标记最终通过前缀和得到所有点的覆盖次数。四、算法核心原理圆的行扫描公式对于圆心 (x0,y0)、半径rrr的圆任取一行yy0jjjj为行偏移量-r j r根据圆的方程 代入y−y0jy-y0jy−y0j可得该行x的覆盖范围即每一行对应一个连续区间 [L, R]其中Lx0−dL x0 - dLx0−dRx0dR x0 dRx0d差分标记 前缀和还原定义二维差分数组g[x][y]对每一行yyy独立维护x方向的差分对每个圆遍历所有行偏移量jjj计算对应行的区间 [L,R]执行差分操作g[L][y]、g[R1][y]--所有圆标记完成后对每一行yyy沿x方向做前缀和g[x][y]即为点(x,y)(x,y)(x,y)的覆盖次数查询时直接判断g[x][y]的奇偶性即可。五、正解代码变量定义与初始化#includebits/stdc.husingnamespacestd;constintN1010;// 坐标最大1000开1010防止越界intg[N][N];// x方向差分数组g[x][y]对应坐标(x,y)intn,m;// n个圆m次询问intx[N],y[N],r[N];// 存储每个圆的圆心与半径signedmain(){cinn;for(inti1;in;i){cinx[i]y[i]r[i];// 处理j0圆心所在的水平行inttlmax(1,x[i]-r[i]);inttrmin(1001,x[i]r[i]1);g[tl][y[i]];g[tr][y[i]]--;}for(inti1;in;i){for(intj1;jr[i];j){// 计算当前行对应的x方向半长dintdsqrt(r[i]*r[i]-j*j);intLmax(1,x[i]-d);intRmin(1001,x[i]d1);intshangy[i]j;// 上方第j行intxiay[i]-j;// 下方第j行if(shang1001){g[L][shang];g[R][shang]--;}if(xia0){g[L][xia];g[R][xia]--;}}}for(inti1;i1000;i){// 前缀和还原覆盖次数for(intj1;j1000;j){g[i][j]g[i-1][j];}}cinm;while(m--){// 处理询问inta,b;cinab;if(g[a][b]1)coutYes\n;elsecoutNo\n;}return0;}六、样例模拟样例输入2个圆圆心分别为 (1,1) 半径5、(11,1) 半径5查询点 (1,1)、(6,1)、(11,1)。差分标记圆1在 y1 行x区间 [1,5]差分g[1][1]g[7][1]--圆2在 y1 行x区间 [6,15]差分g[6][1]g[17][1]--。前缀和计算y1行x1值为 1奇数→ 输出Yesx6值为 112偶数→ 输出Nox11值为 011奇数→ 输出Yes。与样例输出完全一致。七、复杂度时间复杂度预处理每个圆遍历O(r)O(r)O(r)行总操作量约10610^6106次前缀和为 1000 *1000 10^6 次整体约 2e6 次运算效率极高。查询O(q)O(q)O(q)百万级查询无压力。八、总结本题是前缀和差分思想在二维几何问题中的经典进阶应用核心思路是降维处理将二维的圆覆盖拆解为逐行的一维区间覆盖用差分把区间修改从O(n)O(n)O(n)优化到O(1)O(1)O(1)最终通过预处理实现查询的极致效率。这种「网格覆盖 差分降维」的思路广泛适用于坐标范围有限、查询量巨大的平面覆盖类题目。

相关新闻

BLE协议栈核心API实战:GATT、GAPBondMgr与L2CAP深度解析

BLE协议栈核心API实战:GATT、GAPBondMgr与L2CAP深度解析

1. 项目概述:BLE协议栈核心API的实战价值在物联网和智能硬件的开发浪潮中,蓝牙低功耗(BLE)技术因其低功耗、低成本和高普及率,已成为连接万物的首选无线技术之一。然而,对于许多开发者而言,从理…

2026/11/4 10:40:58 阅读更多 →
埃隆·马斯克“超级应用”核心 X Money 上线,美区 X 订阅用户可享数字钱包等功能!

埃隆·马斯克“超级应用”核心 X Money 上线,美区 X 订阅用户可享数字钱包等功能!

X Money 上线:马斯克“超级应用”的关键一步据 9to5Mac 报道,埃隆马斯克将 X 转变为“超级应用”使命的核心部分——X Money 于今日正式推出。这个支付平台为美国的 X Premium 和 Premium Plus 订阅用户提供了丰富的功能,包括数字钱包、类似 …

2026/11/5 3:21:51 阅读更多 →
XXMI Launcher终极指南:一站式游戏模组管理神器,让你轻松玩转所有热门游戏

XXMI Launcher终极指南:一站式游戏模组管理神器,让你轻松玩转所有热门游戏

XXMI Launcher终极指南:一站式游戏模组管理神器,让你轻松玩转所有热门游戏 【免费下载链接】XXMI-Launcher Modding platform for GI, HSR, WW and ZZZ 项目地址: https://gitcode.com/gh_mirrors/xx/XXMI-Launcher 还在为不同游戏的模组管理而烦…

2026/11/6 5:36:50 阅读更多 →

最新新闻

Electron桌面应用开发实战:从环境搭建到打包发布全流程

Electron桌面应用开发实战:从环境搭建到打包发布全流程

做前端这些年,我大部分时间都在跟浏览器标签页打交道,直到第一次把桌面应用跑起来,才发现原来自己一直被限制在地址栏和刷新按钮围起来的框框里。Electron这个词,最开始是在某段时间频繁出现在同事的讨论里,一个用HTML…

2026/11/5 12:28:00 阅读更多 →
滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

简介:亚太天能T109滑盖智能锁产品说明书是一份PDF格式的官方技术文档,主要面向智能锁安装人员、终端用户及售后维护者,帮助快速掌握产品安装、配置与常见故障处理。全包仅1个PDF文件,大小4.37MB,内容结构清晰&#xff…

2026/11/5 1:08:50 阅读更多 →
PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

上个月我在调试一台高速AGV的驱动系统,整车要求空载跑到8m/s,电机转速已经拉到额定点,驱动器的输出电压也顶到了母线电压极限附近。再往上踩速度指令,转速纹丝不动,三相电流反而开始震荡。那会儿我的第一反应就是&…

2026/11/5 12:28:01 阅读更多 →
C++核心知识点:从内存管理到STL的实战指南

C++核心知识点:从内存管理到STL的实战指南

C 这门语言我前前后后折腾了十几年,用它写过嵌入式驱动、做过游戏服务端,也搭过基础组件库。每次看到新人一头扎进"C 核心知识点"这个搜索词,我其实挺感慨的——这门语言的难点从来不是语法多,而是知识点之间的耦合太深…

2026/11/5 12:28:02 阅读更多 →
T109滑盖智能锁怎么装?安装调试与故障排查全攻略

T109滑盖智能锁怎么装?安装调试与故障排查全攻略

简介:亚太天能T109滑盖智能锁产品说明书以PDF格式发布,适合智能锁用户、安装人员与售后维修人员阅读。内容围绕T109系列指纹密码刷卡锁展开,先介绍前面板、后面板、锁体、机械钥匙、电池盒盖等部件名称与功能,再给出完整安装步骤&…

2026/11/5 0:54:28 阅读更多 →
LLM知识降熵:从信息垄断到理解权下放

LLM知识降熵:从信息垄断到理解权下放

你有没有过这种经历:翻开源码注释、论文摘要或者一份专业报告,每个字都认识,连在一起却像天书。想找人聊聊,身边要么没人懂,要么懂的懒得跟你解释。后来我试着把同一段内容丢给一个大语言模型,几秒钟之后&a…

2026/11/5 19:38:59 阅读更多 →

日新闻

周新闻

月新闻