当前位置: 首页 > article >正文

离散化与差分结合应用例题精讲

一、离散化是什么1.为什么用离散化引入当题目给我们几个区间涂色总长为20亿要求我们统计最后有颜色的区域。聪明的我们立刻就想建立一个数组每接收到一个区间就遍历该区间打上标记。最后遍历整个数组统计带有标记的元素个数太暴力了吧。但是聪明的我们又很快发现数组没办法容纳20亿的数据会爆数组。既然如此那我们该怎么办呢2.离散化思考过程于是我们开始思考首先给我们的区间只占这20亿数据的一小部分也就是说存在大量的数据是没有用的。其次给我们的区间可能会有重叠的情况比如[2,6]和[3,9]这种情况我们必须想办法去掉重复的数据。针对这两种情况我们以给出{[2,6],[3,9],[11,16],[11,18]}为例从2到18是不是很大假装很大方便讲解题目很可能是1-999999里面是不是有重叠区间这时候我们大脑中开始出现一个图我们会想该怎么去重呢首先看出[2,6][3,9]有重叠部分[11,16][11,18]有重叠部分这个时候我们可以把每个相邻的点看成一个小片段即[2,3][3,6][6,9][9,11][11,16][16,18]然后再看看每个小片段是否包含在大片段里面我们会发现只有[9,11]不在那么把这个小片段去掉然后就会发现剩下的小片段是不重叠的那么我们只需要计小片段的长度之和就可以了。这个时候我们已经解决了区间重叠带来的计数不方便的问题。3.计算机中离散化的过程以上的操作相当于什么呢相当于我们把所有的坐标拿过来排序去重就会得到这么一个序列。{2,3,6,9,11,16,18}每组相邻的元素就构成上一段的小片段这时候再结合下标看就如下图。我们可以有原来的20亿长数组需要下标对应变成了7元素长数组。原来的索引变成了元素我们就这样建立了一个映射关系从2 3 6....18映射到了0 1 2 3....6发现了没有此时我们又解决了数据过大的问题。这个时候我们怎么统计先判断在不在覆盖区间内怎么判断呢把原来给出的{[2,6],[3,9],[11,16],[11,18]}记录下来然后遍历新数组的每组相邻元素[l,r]是否被包含在这些区间内部就可以然后怎么求长度呢这里我们已经解决了两个难题了是不是可以直接通过累加新数组每组相邻元素的差1就可以得到最后的答案了但这时候如果给出区间为n个切成小区间后为m个每个小区间都要遍历一遍所有大区间看看是否在大区间内还要对每个小区间都进行一遍这样的操作最后的时间复杂度为一旦给出数据过多就会超时。4.差分的应用那么该怎么优化我们再回到20亿数组去我们用20亿数组的时候回怎么统计这些小片段的长度有没有想到差分但是没有20亿的数组我们这时候可不可以在新数组里差分呢当然可以首先要明确原理依然是统计每组相邻包含在覆盖范围内的差值即每个小片段的长度那么我们第一步还是看看小区间是不是被覆盖就需要根据给出的大区间所以对大区间差分我们构造差分数组这个差分数组是和新数组对应的。对每一组大区间[l,r]然后进行标准差分操作。注意是对l,r在新数组的索引cha[indexof[l]]; cha[indexof[r]]--;这个时候[l,r]的其余已经打上标记了注意这里打上标记和对20亿数组[l,r]区间每个元素打上标记的含义不同而是对新数组的[l,r]区间打上标记这也是映射解决数组超大无法遍历打标记的根本优势所在。例如对给出的[2,6]我们是对差分数组的2,6对应新数组下标处就是0,2处打标记。差分数组打完标记后前缀和统计注意因为是依据大区间打标记的所以依然存在重叠现象所以不能直接统计和而是只要这个位置前缀大于0就说明被覆盖过所以这个小片段在覆盖范围内就对这个小区间求和即相邻两项的差值最后得出答案。这就是离散化和差分的结合应用——对超大数组的某些区间的覆盖问题。其中解决两个问题的过程就是离散化把原来极度分散的有用数据聚集起来得到一个新的映射从而去掉大量无用数据并且防止重复。其中离散化的排序去重部分的代码实现如下Collections.sort(list); //排序 ListInteger tempnew ArrayListInteger(); //暂存新数组 for(int i0;ilist.size();i) { if(i0 || !list.get(i).equals(list.get(i-1))) //第一个数不重复一定会存进去 { temp.add(list.get(i)); } } listtemp;最后对离散化后的数据进行高效统计的差分过程如下int lenlist.size(); //离散化后的长度 int []chanew int[len1]; //去重后长度len1 for(int i0;in;i) { int lCollections.binarySearch(list,op[i][0]); //获取下标 int rCollections.binarySearch(list,op[i][1]); cha[l]; cha[r]--; } int sum0; int ans0; for(int i0;ilen;i) { sumcha[i]; if(sum0) //只要大于0就说明被覆盖了 { anslist.get(i1)-list.get(i); } }5.思路总结1.数组太大没法直接暴力2.发现排序去重可以缩小数组离散化3.想怎么求4.发现对大区间差分然后前缀和只要大于1就是被覆盖的规律5.利用4规律检测覆盖情况再求小区间大小二、例题P1496 火烧赤壁 - 洛谷这个例题是离散化差分的经典例题思路和上面思路完全相同。import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner scnew Scanner(System.in); int nsc.nextInt(); ListInteger listnew ArrayListInteger(); int [][]opnew int[n][2]; //保存每个区间 for(int i0;in;i) { int lsc.nextInt(); int rsc.nextInt(); op[i][0]l; op[i][1]r; list.add(l); list.add(r); } Collections.sort(list); //排序 ListInteger tempnew ArrayListInteger(); for(int i0;ilist.size();i) { if(i0 || !list.get(i).equals(list.get(i-1))) //第一个数不会重复一定会存进去 { temp.add(list.get(i)); } } listtemp; int lenlist.size(); //离散化后的长度 int []chanew int[len1]; //去重后长度len1 for(int i0;in;i) { int lCollections.binarySearch(list,op[i][0]); //获取下标 int rCollections.binarySearch(list,op[i][1]); cha[l]; cha[r]--; } int sum0; int ans0; for(int i0;ilen;i) { sumcha[i]; if(sum0) { anslist.get(i1)-list.get(i); } } System.out.println(ans); } }离散化我个人感觉还是比较难的两天晚上都在思考离散化的过程但现在也不是很理解接下来我可能还会做两个有关离散化的例题加深一下对离散化的认识。感谢大家观看如有不足敬请指正。

相关文章:

离散化与差分结合应用例题精讲

一、离散化是什么? 1.为什么用离散化 引入:当题目给我们几个区间涂色,总长为20亿,要求我们统计最后有颜色的区域。 聪明的我们立刻就想建立一个数组,每接收到一个区间就遍历该区间打上标记。最后遍历整个数组统计带…...

如何用LangChain开发一个Agent,20分钟包教包会!

26年一定是一个 Agent 大年,我这边持续出系列文章,帮助大家更好的落地 Agent,今天的重点是程序员最常用的 Agent 框架 LangChain。 只不过这东西可能由于 AI Coding 的成熟,由给人看变成给 AI 看的。 LangChain 既是一个开源的A…...

AI Agent学习日记 Day2

今天继续实现word翻译功能,上次的代码翻译完后会丢失图片等元素,让deepseek改了好几版代码都还是有问题,我决定先搞懂根本原因再改代码。经调查,Word 的文档结构(通过 COM 对象模型)如下:Docume…...

大模型面试必备:模型训练与微调 15 问全解析

导读:2026 年,大模型已从"尝鲜"走向"落地"。无论是求职面试还是项目实战,模型训练与微调都是绕不开的核心话题。本文基于面试辅导资料,结合行业最佳实践,梳理了 15 个关键知识点,助大家…...

告别手动测试:用快马AI生成telnet端口批量检测脚本,效率提升十倍

最近在运维工作中频繁遇到需要批量检测服务器telnet端口连通性的需求。手动一台台测试不仅效率低下,还容易出错。经过一番摸索,我总结出一套用Python快速实现批量检测的方案,效率比手工操作提升了十倍不止。这里分享下具体实现思路和优化经验…...

SEO_如何通过内容优化有效提升SEO效果(353 )

SEO内容优化:如何通过高质量内容提升SEO效果 在当今的互联网时代,搜索引擎优化(SEO)已经成为了每一个网站运营者必须掌握的技能。而其中,内容优化是提升SEO效果的关键。好的内容不仅能吸引更多的访问者,还…...

终极文件伪装指南:如何3分钟让任何文件“隐形“传输

终极文件伪装指南:如何3分钟让任何文件"隐形"传输 【免费下载链接】apate 简洁、快速地对文件进行格式伪装 项目地址: https://gitcode.com/gh_mirrors/apa/apate 在当今数据安全日益重要的时代,apate文件伪装工具为开发者和技术爱好者…...

网站 SEO 软件如何提高网站流量

了解网站 SEO 软件的重要性 在当今互联网时代,网站流量的重要性不言而喻。无论你经营的是一个电子商务网站,博客,还是企业官方网站,高流量意味着更多的曝光和潜在客户。如何有效地提高网站流量呢?这里,我们…...

基于python的本地选择图像接入百度云api的图像识别项目

项目灵感来源于老师布置的任务。怎么感觉老师这个题目也是ai生成的~。~ 题目:基于 AI 视觉的本地图像分析脚本 任务要求: 请使用 Python 编写一个通用的图像分析脚本,具体流程需满足以下三个步骤: * 本地选图:程序运…...

YOLOv8人脸检测架构解析:高精度实时人脸定位技术实战指南

YOLOv8人脸检测架构解析:高精度实时人脸定位技术实战指南 【免费下载链接】yolov8-face yolov8 face detection with landmark 项目地址: https://gitcode.com/gh_mirrors/yo/yolov8-face YOLOv8-face是基于YOLOv8架构优化的专业人脸检测解决方案&#xff0c…...

关于整数和浮点数在内存中的存储

了解整数和浮点数在内存中的存储可以更有助于我们深入理解知识,在解一些题时也能起到重要的作用,是我们在学C中不可或缺的重要组成部分,接下来我简要介绍一下:首先,整数就是用二进制码存储。在内存中以补码的形式进行存…...

FireRedASR Pro效果展示:长难句识别准确,抗噪能力惊艳

FireRedASR Pro效果展示:长难句识别准确,抗噪能力惊艳 1. 语音识别新标杆 在嘈杂的会议室里,一段夹杂着咳嗽声和键盘敲击的录音正在播放。令人惊讶的是,FireRedASR Pro几乎一字不差地将这段对话转换成了文字,连专业术…...

Omni-Vision Sanctuary 大模型一键部署:Python入门级环境配置实战

Omni-Vision Sanctuary 大模型一键部署:Python入门级环境配置实战 1. 开篇:为什么选择Omni-Vision Sanctuary 如果你刚接触AI大模型,可能会被各种复杂的部署流程吓到。别担心,今天我们要聊的Omni-Vision Sanctuary是个对新手特别…...

终极指南:如何用Python SDK快速集成飞书开放平台API

终极指南:如何用Python SDK快速集成飞书开放平台API 【免费下载链接】oapi-sdk-python Larksuite development interface SDK 项目地址: https://gitcode.com/gh_mirrors/oa/oapi-sdk-python 想要在Python应用中快速集成飞书开放平台的强大功能,却…...

突破3大核心优势:Path of Building革新流放之路Build规划体验

突破3大核心优势:Path of Building革新流放之路Build规划体验 【免费下载链接】PathOfBuilding Offline build planner for Path of Exile. 项目地址: https://gitcode.com/GitHub_Trending/pa/PathOfBuilding 在《流放之路》复杂的角色构建系统中&#xff0…...

RobotStudio 仿真软件学习分享02 —— 仿真

目录一、本次学习内容总结二、学习经历(实操操作过程)2.1 机器人模型导入2.2 机器人工具加载与周边设备导入2.3 创建机器人控制系统2.4 创建工件坐标系(Workobject_1)2.5 创建并仿真机器人运动轨迹2.6 仿真视频录制三、补充关键注…...

Visual C++运行库全解析:从问题诊断到高效部署的完整指南

Visual C运行库全解析:从问题诊断到高效部署的完整指南 【免费下载链接】vcredist AIO Repack for latest Microsoft Visual C Redistributable Runtimes 项目地址: https://gitcode.com/gh_mirrors/vc/vcredist 问题诊断:运行库故障的典型表现与…...

PyCINRAD:解锁中国新一代气象雷达数据的Python利器

PyCINRAD:解锁中国新一代气象雷达数据的Python利器 【免费下载链接】PyCINRAD Decode CINRAD (China New Generation Weather Radar) data and visualize. 项目地址: https://gitcode.com/gh_mirrors/py/PyCINRAD 还在为处理复杂的CINRAD雷达数据格式而烦恼吗…...

Thorium浏览器:重新定义现代网页浏览体验的高性能解决方案

Thorium浏览器:重新定义现代网页浏览体验的高性能解决方案 【免费下载链接】thorium Chromium fork named after radioactive element No. 90. Source code and Linux releases. Windows/MacOS/ARM builds served in different repos, links are towards the top of…...

代码随想录算法训练营第二天 | Leetcode 209.长度最小的子数组 | Leetcode 59.螺旋矩阵 II | 区间和 | 开发商购买土地

209.长度最小的子数组 力扣题目链接:209. 长度最小的子数组 - 力扣(LeetCode)文档讲解:209.长度最小的子数组 | 滑动窗口 | 连续子数组 | 代码随想录视频讲解:拿下滑动窗口! | LeetCode 209 长度最小的子数…...

MiniCPM-o-4.5-nvidia-FlagOS插件开发指南:为谷歌浏览器打造智能阅读与摘要助手

MiniCPM-o-4.5-nvidia-FlagOS插件开发指南:为谷歌浏览器打造智能阅读与摘要助手 你是不是经常在网上冲浪时,面对一篇长文感到头疼,只想快速抓住核心要点?或者遇到一篇外文资料,需要逐句翻译才能理解?又或者…...

C++27协程标准化十大争议点终稿确认(含P2389R5/P2713R2/P2877R2等7项关键paper表决结果与工业界影响评估)

第一章:C27协程标准化演进全景与终稿里程碑意义C27协程标准的正式确立标志着C异步编程范式完成从实验性特性到语言级原语的根本性跃迁。自C20引入co_await、co_yield和co_return三大协程关键字以来,委员会持续通过P2526R4(无栈协程语义精化&a…...

公司 SEO 网站优化服务如何应对搜索引擎算法更新_公司 SEO 网站优化服务如何提高网站的曝光度

公司 SEO 网站优化服务如何应对搜索引擎算法更新 在数字化时代,搜索引擎算法的更新频繁,给公司的SEO网站优化服务带来了不小的挑战。搜索引擎不断优化其算法,以提升用户体验和搜索结果的相关性。这种变化往往会对网站的排名和曝光度产生直接…...

MindSpore 环境配置完全指南

1 安装与初始化 # 全局安装 OpenSpec npm install -g fission-ai/openspeclatest # 在项目目录下初始化 cd /path/to/your-project openspec init 初始化时,OpenSpec 会提示你选择使用的 AI 工具(Claude Code、Cursor、Trae、Qoder 等)。 3 O…...

突破音频格式壁垒:QMCDecoder开源工具实现无损音频自由转换

突破音频格式壁垒:QMCDecoder开源工具实现无损音频自由转换 【免费下载链接】qmc-decoder Fastest & best convert qmc 2 mp3 | flac tools 项目地址: https://gitcode.com/gh_mirrors/qm/qmc-decoder 问题:当音乐被数字锁链束缚——QMC格式的…...

鸣潮终极自动化解决方案:智能图像识别实现高效游戏体验

鸣潮终极自动化解决方案:智能图像识别实现高效游戏体验 【免费下载链接】ok-wuthering-waves 鸣潮 后台自动战斗 自动刷声骸 一键日常 Automation for Wuthering Waves 项目地址: https://gitcode.com/GitHub_Trending/ok/ok-wuthering-waves ok-ww是一款基于…...

新手友好:无需配置环境,在快马平台编写第一行open claw控制代码

今天想和大家分享一个特别适合新手入门的Open Claw控制小项目。作为一个刚接触机器人控制的小白,我发现在InsCode(快马)平台上可以轻松实现机械爪的基础控制,完全不需要配置复杂的环境,特别适合零基础学习。 Open Claw是什么? Ope…...

5MB轻量级中文字体:WenQuanYi Micro Hei完全指南

5MB轻量级中文字体:WenQuanYi Micro Hei完全指南 【免费下载链接】fonts-wqy-microhei Debian package for WenQuanYi Micro Hei (mirror of https://anonscm.debian.org/git/pkg-fonts/fonts-wqy-microhei.git) 项目地址: https://gitcode.com/gh_mirrors/fo/fon…...

实战利器:基于快马平台为你的车辆检测项目定制专属labelimg标注工具

在AI项目开发中,数据标注往往是决定模型效果的关键环节。最近我在做一个车辆检测项目时,发现通用的标注工具无法满足特定需求,于是尝试用InsCode(快马)平台快速定制了一个专属的labelimg工具。整个过程比想象中顺利,分享几个实战要…...

ComfyUI插件管理工具:构建稳定高效的AI创作环境

ComfyUI插件管理工具:构建稳定高效的AI创作环境 【免费下载链接】ComfyUI-Manager ComfyUI-Manager is an extension designed to enhance the usability of ComfyUI. It offers management functions to install, remove, disable, and enable various custom node…...