差分法详解

前言
差分算法适用于一些需要对数组和序列进行增减、查询和更新操作的问题,可以提高计算效率和降低存储空间的需求。今天我将带大家学习如何使用差分法,会以例题来带大家使用差分法以增进理解。话不多说让我们开始吧!
在这里插入图片描述

文章目录

  • 一维差分
  • 尾声

一维差分

首先我们需要创建一个数组arr表示差分数组,然后再创建一个arrsum数组用来表示arr的前缀和。

即arr[i] = arrsum[i] - arrsum[i-1]
  arrsum[i] = arr[i] + arr[i-1] + ... + arr[1]

假设我们对arr数组进行操作从下标l到下标r中的每个元素都+1。如图
在这里插入图片描述
这里我们如果把l-r的每个元素都加1会十分的费事,但是我们如果对arrsum进行如下操作就会非常简单只需要让arrsum[ l ] + 1让arrsum[ r + 1 ] - 1即可。如图
在这里插入图片描述
因为arrsum是前缀和,只要在l位置+1,r+1位置-1,l-r的群域内都进行了+1操作。
可是我们所求的数组并不是arrsum数组,那我们是不是可以想办法把arrsum变成arr呢?比如arr【5】里有 1 2 3 4 5 ,现在让arrsum的初始值设为 0, -1, -2, -3, --4。然后计算前缀和的时候用这个计算公式arrsum[ i ] = arrsum[ i ] + arrsum[ i -1] + arr[ i ]即可把arrsum变成操作后arr数组的模样,那么我们用这道题例题来带大家使用一下差分法。
给出数组arr,共有n个元素,对其进行q次操作,每次操作会对[ l , r ]区间内的元素+1,请输出进行操作后的arr数组。
输入样例
第一行为n和q
第二行为arr数组的元素
往后q行为l和r
10 2
1 2 3 4 5 6 7 8 9 10
1 5
9 10
输出样例
2 3 4 5 6 6 7 8 10 11
题解:

#include<stdio.h>
int main()
{
	int arr[100] = { 0 };
	int arrsum[100] = { 0 };//前缀和
	int n, q;
	scanf("%d %d", &n, &q);
	for (int i = 1; i <= n; i++)
	{
		scanf("%d", &arr[i]);
	}
	for (int i = 1; i <= n; i++)//使求出的前缀和数组刚好为操作后的arr数组
	{
		arrsum[i] += arr[i];
		arrsum[i + 1] -= arr[i];
	}
	while (q--)//q次操作
	{
		int l, r;
		scanf("%d %d", &l, &r);
		arrsum[l] += 1;
		arrsum[r + 1] -= 1;
	}
	for (int i = 2; i <= n; i++)//求前缀和(其实是造作后的arr数组)
	{
		arrsum[i] += arrsum[i - 1];
	}
	for (int i = 1; i <= n; i++)//打印出来
	{
		printf("%d ", arrsum[i]);
	}
	return 0;
}

这样即可解题。

尾声

相信看到这里的小伙伴们也一定掌握了差分法的精髓了,如果觉得博主讲的不错的话请给博主一个关注,点赞,收藏哦~,本期分享就到这里了,我们下期再见!

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

常见Web开发安全漏洞的防御手段

一、Web开发安全漏洞的防御手段方案 输入验证和过滤&#xff1a;对用户输入进行严格的验证和过滤&#xff0c;确保输入的数据符合预期的格式和类型&#xff0c;防止恶意输入或注入攻击。参数化查询&#xff1a;使用预编译的SQL语句和参数化查询接口&#xff0c;避免将用户输入…

逻辑回归的介绍和应用

逻辑回归的介绍 逻辑回归&#xff08;Logistic regression&#xff0c;简称LR&#xff09;虽然其中带有"回归"两个字&#xff0c;但逻辑回归其实是一个分类模型&#xff0c;并且广泛应用于各个领域之中。虽然现在深度学习相对于这些传统方法更为火热&#xff0c;但实…

vue使用el-tag完成添加标签操作

需求&#xff1a;做一个添加标签的功能&#xff0c;点击添加后输入内容后回车可以添加&#xff0c;并且标签可以删除 1.效果 2.主要代码讲解 鼠标按下后触发handleLabel函数&#xff0c;根据回车的keycode判断用户是不是按下的回车键&#xff0c;回车键键值为13&#xff0c;用…

Selenium IED-安装及简单使用

本文已收录于专栏 《自动化测试》 目录 背景介绍优势特点安装步骤录制脚本总结提升 背景介绍 Selenium 通过使用 WebDriver 支持市场上所有主流浏览器的自动化。 Webdriver 是一个 API 和协议&#xff0c;它定义了一个语言中立的接口&#xff0c;用于控制 web 浏览器的行为。 每…

基于ssm神马物流系统论文

摘 要 本神马物流管理系统设计目标是实现神马物流的信息化管理&#xff0c;提高管理效率&#xff0c;使得神马物流管理作规范化、科学化、高效化。 本文重点阐述了神马物流管理系统的开发过程&#xff0c;以实际运用为开发背景&#xff0c;基于SSMVue框架&#xff0c;运用了Ja…

Zoho Desk与Zendesk详细对比:热门在线客服系统之争

企业需要一款功能强大且丰富的客服系统产品为其解决客户服务的难题。对于了解过Zendesk的企业来讲&#xff0c;可能会考虑到还有哪些产品可供选择&#xff0c;便于对比选择出更合适的产品。这篇文章就为大家展现了一款和Zendesk功能相似的产品——Zoho Desk&#xff0c;在功能、…

香港优才计划DIY申请你以为的不过是幻想,客观评价才能保证通过率!

香港优才计划DIY申请你以为的不过是幻想&#xff0c;客观评价才能保证通过率&#xff01; 香港优才计划申请看似步骤很简单&#xff0c;其实很多细节需要专业人士把控。DIY申请者认为优才申请很简单&#xff0c;自评→准备材料→网上提交→等待获批...事实真的如此吗&#xff1…

postman测试文件上传接口教程,看完就会。。。

postman是一个很好的接口测试软件&#xff0c;有时候接口是Get请求方式的&#xff0c;肯定在浏览器都可以测了&#xff0c;不过对于比较规范的RestFul接口&#xff0c;限定了只能post请求的&#xff0c;那你只能通过工具来测了&#xff0c;浏览器只能支持get请求的接口&#xf…

运筹学经典问题(三):最大流问题

问题描述 给定一个图网络 G ( V , E ) G(V, E) G(V,E)&#xff0c;网络中连边的权重代表最大容量&#xff0c;在这个图中找出从起点到终点流量最大的路径。 数学建模 集合&#xff1a; I I I&#xff1a;点的集合&#xff1b; E E E&#xff1a;边的集合。 常量&#x…

TrustZone之安全虚拟化

在Armv7-A首次引入虚拟化时,它仅在非安全状态中添加。在Armv8.3之前,Armv8也是如此,如下图所示: 如前所述在切换安全状态时,EL3用于托管固件和安全监视器。安全EL0/1托管受信任的执行环境(TEE),由受信任的服务和内核组成。 在安全状态下,没有对多个虚拟机的需…

Mysql进阶-InnoDB引擎事务原理及MVCC

事务原理 事务基础 事务是一组操作的集合&#xff0c;它是一个不可分割的工作单位&#xff0c;事务会把所有的操作作为一个整体一起向系 统提交或撤销操作请求&#xff0c;即这些操作要么同时成功&#xff0c;要么同时失败。 事务的四大特性&#xff1a; 原子性&#xff08;A…

国产Apple Find My「查找」认证芯片-伦茨科技ST17H6x芯片

深圳市伦茨科技有限公司&#xff08;以下简称“伦茨科技”&#xff09;发布ST17H6x Soc平台。成为继Nordic之后全球第二家取得Apple Find My「查找」认证的芯片厂家&#xff0c;该平台提供可通过Apple Find My认证的Apple查找&#xff08;Find My&#xff09;功能集成解决方案。…

人工智能与数据分析:新时代的趋势和机会

目录 写在开头1. 融合AI和数据分析的趋势1.1 趋势变化1.2 数据驱动目标转换 2 对数据分析行业的影响2.1 技能需求2.2 工作流程和角色的变化2.3 创新和业务驱动的数据分析 3.场景变化3.1 场景1&#xff1a;智能决策支持系统3.1.1 智能决策支持系统的架构设计3.1.2 Python代码演示…

系列十五、Redis面试题集锦

一、Redis面试题集锦 1.1、Redis到底是单线程还是多线程 Redis6.0版本之前的单线程指的是其网络IO和键值对读写是由一个线程完成的&#xff1b; Redis6.0引入的多线程指的是网络请求过程采用了多线程&#xff0c;而键值对读写命令仍然是单线程的&#xff0c;所以多线程环境下&…

【Linux】命令expect使用详解

&#x1f984; 个人主页——&#x1f390;个人主页 &#x1f390;✨&#x1f341; &#x1fa81;&#x1f341;&#x1fa81;&#x1f341;&#x1fa81;&#x1f341;&#x1fa81;&#x1f341; 感谢点赞和关注 &#xff0c;每天进步一点点&#xff01;加油&#xff01;&…

我的网站被攻击了怎么防护?

“我的网站被攻击了&#xff0c;该怎么办”&#xff0c;今天一个用户因为网站遭受攻击无法访问而找到德迅云安全这样讲到。那么遇到网站被攻击时应该怎么处理&#xff1f;下面我们就来说下遇到这类攻击情况&#xff0c;有哪些思路方案可以去解决网站被攻击的问题。 首先&#x…

MISRA C++ 2023:C和C++测试解决方案实现静态分析

自动化软件测试解决方案的全球领导者Parasoft今天宣布&#xff0c;随着Parasoft C/Ctest 2023.2即将发布&#xff0c;全面支持MISRA C 2023。Parasoft针对C和C软件开发的完全集成测试解决方案计划于2023年12月发布&#xff0c;可以帮助团队实现自动化静态分析和编码标准合规性&…

【亚马逊云科技】使用Vscode Amazon-Q完成GUI界面粉笔脚本开发

本篇文章授权活动官方亚马逊云科技文章转发、改写权&#xff0c;包括不限于在 亚马逊云科技开发者社区, 知乎&#xff0c;自媒体平台&#xff0c;第三方开发者媒体等亚马逊云科技官方渠道 前言 亚马逊云科技-Q&#xff0c;可以快速获得紧迫问题的相关答案&#xff0c;解决问题…

解决多卡机器CUDA Error Code 802(CUDA_ERROR_SYSTEM_NOT_READY)

解决多卡机器安装完CUDA后&#xff0c;出现802错误码&#xff1a;Fabric Manager需要和Driver具有完全一致的版本号。 现象 检查 查看service状态&#xff1a; 显示failed&#xff0c;查看nvidia-smi中的Driver版本&#xff1a; 切换版本 sudo yum list installed | grep…

win10 node-red安装及管理配置

win10 node-red安装及管理配置 一、安装node.js环境二、安装node-red环境2.1 node-red安装2.2 node-red安全登录方式 三、pm2管理node-red服务3.1 安装pm23.2 pm2管理node-red服务 四、常用命令4.1 npm命令4.2 pm2命令 更多 本文旨在详细介绍windows10系统下的node-red开发配置…