蓝桥杯-小明的彩灯(差分)

问题描述:

在这里插入图片描述

差分数组

1. 什么是差分数组?

差分数组 c 是原数组 a 的“差值表示”,其定义如下:

  • c[0] = a[0]
  • c[i] = a[i] - a[i-1]i ≥ 1

差分数组记录了相邻元素的差值。例如,原数组 a = [1, 3, 5, 2] 对应的差分数组为 c = [1, 2, 2, -3]

2. 差分数组的优势

通过差分数组,可以将区间操作转换为两次单点操作:

  • 若要将区间 [l, r] 的所有元素增加 k,只需执行:
    • c[l] += k
    • c[r+1] -= k
      这一操作的时间复杂度为 O(1),彻底避免了遍历区间。

3. 还原原数组

对差分数组进行前缀和运算即可还原原数组:

  • a[i] = c[0] + c[1] + ... + c[i]
    前缀和的本质是逐步累加差分值,恢复出原数组的实际数值。

解题思路详解

步骤1:构建差分数组

  1. 初始化差分数组 c,长度为 n+1(多一位用于处理右边界)。
  2. 根据原数组 a 的相邻差值填充 c,确保 c[i] = a[i] - a[i-1]

步骤2:处理区间操作

对于每个操作 [l, r, k]

  • c[l] += k,表示从 l 开始的所有元素增加 k
  • c[r+1] -= k,表示在 r+1 处抵消多余的 k,保证操作仅作用于 [l, r]

步骤3:还原修改后的数组

通过前缀和还原最终的数组:

  • c[1] 开始,依次累加 c[i] += c[i-1],最终 c[0...n-1] 即为修改后的原数组。

代码:

public static void main(String[] args) {//通过原数组计算 差分 数组//再通过计算出的 差分 数组做 数据操作,例如(要将[l,r]区间所有数组+1)就将c[l]+1 c[r+1]-1//对差分数组,做前缀和操作得到原数组//有一个坑,虽然数据都是在int范围内,但是会涉及到相加操作,可能会超出int范围,所以我们的差分数组应该设置为longScanner sc = new Scanner(System.in);int n = sc.nextInt();int m = sc.nextInt();int[] a = new int[n];//在创建差分数组的时候长度要设置为a.length + 1这是很有必要的,防止数组越界 这个边界操作(c[r + 1] -= 1;)long[] c = new long[n + 1];a[0] = sc.nextInt();//初始化差分数组c[0] = a[0];for (int i = 1; i < n; i++) {a[i] = sc.nextInt();c[i] = a[i] - a[i - 1];}
//        System.out.println("原数组a:" + Arrays.toString(a));
//        System.out.println("差分数组c:" + Arrays.toString(c));//要将[l,r]区间所有数组+cfor (int i = 0; i < m; i++) {int l = sc.nextInt();int r = sc.nextInt();int sum = sc.nextInt();c[l - 1] += sum;c[r] -= sum;}for (int i = 1; i < n; i++) {//这里复原的原理其实很简单// 例如对 1 2 3 4 5的[2,4]区间做+1操作,// 由于差分数组记录的是第i个数比第i-1个数大多少,之前i比i-1大1,+1操作之后,就是i比i-1大2了,// 但是由于我们要求在到[l,r]区间,所以r之后的差分就得还原 所以再做一个-1操作还原// 所以还原的时候,就能得到题目要求的数组了c[i] += c[i - 1];}for (int i = 0; i < n; i++) {if (c[i] < 0) {System.out.print(0 + " ");} elseSystem.out.print(c[i] + " ");}}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/77211.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

精品可编辑PPT | 基于湖仓一体构建数据中台架构大数据湖数据仓库一体化中台解决方案

本文介绍了基于湖仓一体构建数据中台架构的技术创新与实践。它详细阐述了数据湖、数据仓库和数据中台的概念&#xff0c;分析了三者的区别与协作关系&#xff0c;指出数据湖可存储大规模结构化和非结构化数据&#xff0c;数据仓库用于高效存储和快速查询以支持决策&#xff0c;…

最近api.themoviedb.org无法连接的问题解决

修改NAS的host需要用到SSH终端连接工具&#xff0c;比如常见的Putty&#xff0c;XShell&#xff0c;或者FinalShell等都可以&#xff0c;我个人还是习惯Putty。 1.输入命令“ sudo -i ”回车&#xff0c;提示输入密码&#xff0c;密码就是我们NAS的登录密码&#xff0c;输入的…

0.机器学习基础

0.人工智能概述&#xff1a; &#xff08;1&#xff09;必备三要素&#xff1a; 数据算法计算力 CPU、GPU、TPUGPU和CPU对比&#xff1a; GPU主要适合计算密集型任务&#xff1b;CPU主要适合I/O密集型任务&#xff1b; 【笔试问题】什么类型程序适合在GPU上运行&#xff1…

多类型医疗自助终端智能化升级路径(代码版.下)

医疗人机交互层技术实施方案 一、多模态交互体系 1. 医疗语音识别引擎 # 基于Wav2Vec2的医疗ASR系统 from transformers import Wav2Vec2Processor, Wav2Vec2ForCTC import torchaudioclass MedicalASR:def __init__(self):self.processor = Wav2Vec2Processor.from_pretrai…

前端基础:React项目打包部署服务器教程

问题背景 我做了一个React框架的前端的Node项目&#xff0c;是一个单页面应用。 页面路由用的是&#xff0c;然后使用了React.lazy在路由层级对每一个不同页面进行了懒加载&#xff0c;只有打开那个页面才会加载对应资源。 然后现在我用了Webpack5对项目进行了打包&#xff…

【深度学习:理论篇】--Pytorch基础入门

目录 1.Pytorch--安装 2.Pytorch--张量 3.Pytorch--定义 4.Pytorch--运算 4.1.Tensor数据类型 4.2.Tensor创建 4.3.Tensor运算 4.4.Tensor--Numpy转换 4.5.Tensor--CUDA&#xff08;GPU&#xff09; 5.Pytorch--自动微分 &#xff08;autograd&#xff09; 5.1.back…

使用 Spring Boot 快速构建企业微信 JS-SDK 权限签名后端服务

使用 Spring Boot 快速构建企业微信 JS-SDK 权限签名后端服务 本篇文章将介绍如何使用 Spring Boot 快速构建一个用于支持企业微信 JS-SDK 权限校验的后端接口&#xff0c;并提供一个简单的 HTML 页面进行功能测试。适用于需要在企业微信网页端使用扫一扫、定位、录音等接口的…

工程师 - FTDI SPI converter

中国网站&#xff1a;FTDIChip- 首页 UMFT4222EV-D UMFT4222EV-D - FTDI 可以下载Datasheet。 UMFT4222EVUSB2.0 to QuadSPI/I2C Bridge Development Module Future Technology Devices International Ltd. The UMFT4222EV is a development module which uses FTDI’s FT4222H…

rcore day6

批处理系统 (Batch System) 出现于计算资源匮乏的年代&#xff0c;其核心思想是&#xff1a; 将多个程序打包到一起输入计算机&#xff1b;当一个程序运行结束后&#xff0c;计算机会 自动 执行下一个程序 应用程序难免会出错&#xff0c;如果一个程序的错误导致整个操作系统都…

Linux系统学习Day2——在Linux系统中开发OpenCV

一、OpenCV简介 OpenCV&#xff08;Open Source Computer Vision Library&#xff09;是一个开源的跨平台计算机视觉和机器学习库&#xff0c;广泛应用于图像处理、视频分析、物体检测等领域。它提供了丰富的算法和高效的工具集&#xff0c;支持C、Python等多种语言&#xff0c…

SAP Overview

SAP—企业运营的数字化引擎 在数字化转型的浪潮中&#xff0c;SAP以其全面的企业应用软件套件&#xff0c;为全球企业提供了强大的运营支持。SAP的模块化解决方案覆盖了企业运作的每一个关键环节&#xff0c;从销售到仓库管理&#xff0c;每个模块都是针对特定业务需求精心设计…

Kafka 中的幂等机制

Kafka 中的 幂等性&#xff08;Idempotence&#xff09; 是生产者端的重要机制&#xff0c;旨在确保即使在网络抖动、重试、Broker 重启等情况下&#xff0c;同一条消息不会被重复写入到 Topic 中。这是实现可靠消息传递、避免重复消费的关键手段之一。 ✅ 什么是幂等性&#…

用c语言写一个linux进程之间通信(聊天)的简单程序

使用talk 用户在同一台机器上talk指令格式如下&#xff1a; ​ talk 用户名ip地址 [用户终端号] 如果用户只登录了一个终端&#xff0c;那么可以不写用户终端号&#xff0c;如&#xff1a; talk userlocalhost可以使用who指令来查看当前有哪些用户登录&#xff0c;他的终端号…

深入探索Scala:从基础到进阶的全面总结

在大数据技术领域&#xff0c;Scala语言凭借其独特优势占据重要地位。它与Spark紧密相连&#xff0c;为大数据计算提供强大支持。今天&#xff0c;让我们一同深入回顾Scala从基础到进阶的关键知识点。 Scala开发环境搭建是入门的第一步&#xff0c;需确保JDK安装成功&#xff0…

【每日一个知识点】分布式数据湖与实时计算

在现代数据架构中&#xff0c;分布式数据湖&#xff08;Distributed Data Lake&#xff09; 结合 实时计算&#xff08;Real-time Computing&#xff09; 已成为大数据处理的核心模式。数据湖用于存储海量的结构化和非结构化数据&#xff0c;而实时计算则确保数据能够被迅速处理…

GPT-5、o3和o4-mini即将到来

原计划有所变更: 关于我们应有何期待的一些零散想法。 深度研究(Deep Research)确实强大但成本高昂且速度较慢(当前使用o3模型)。即将推出的o4-mini在性能上可能与o3相近,但将突破这些限制,让全球用户——甚至免费用户(尽管会有速率限制)——都能用上世界顶级AI研究助…

Spring Cloud LoadBalancer负载均衡+算法切换

目录 介绍核心功能负载均衡启动两个支付服务订单模块引入依赖LoadBalanced 注解启动订单服务测试结果 负载均衡算法切换总结 介绍 Spring Cloud LoadBalancer 是 Spring Cloud 提供的客户端负载均衡解决方案&#xff0c;提供更现代化的 API 和更好的 Spring 生态系统集成。它支…

Chrome 浏览器插件收录

1. Responsive Viewer 可以在同个窗口内&#xff0c;针对同一网站&#xff0c;添加多个不同设备屏幕显示。 在前端开发&#xff0c;需要多端适配&#xff0c;尤其是移动端响应式适配的网站开发中&#xff0c;可以同时测试多个不同屏幕的适配效果。 2. VisBug 提供工具栏&#x…

SQL 函数概述

SQL 函数概述 SQL 函数可以分为几大类&#xff0c;不同数据库系统可能有略微不同的实现。以下是主要的 SQL 函数分类&#xff1a; 1. 聚合函数 (Aggregate Functions) COUNT() - 计算行数 SUM() - 计算总和 AVG() - 计算平均值 MIN() - 找最小值 MAX() - 找最大值 GROUP…

MySQL学习笔记九

第十一章使用数据处理函数 11.1函数 SQL支持函数来处理数据但是函数的可移植性没有SQL强。 11.2使用函数 11.2.1文本处理函数 输入&#xff1a; SELECT vend_name,UPPER(vend_name) AS vend_name_upcase FROM vendors ORDER BY vend_name; 输出&#xff1a; 说明&#…