acwing算法基础-chapter01-差分

news2024/11/19 7:47:56

差分介绍

结论:差分是前缀和的逆运算

举例

一维差分
//一维前缀和 a[i]部分就是一维差分数组
s[i] = s[i-1]+a[i];
//一维差分 
a[i] = s[i]-s[i-1];

二维差分
//二维前缀和 a[i][j]部分就是一维差分数组
s[i][j] = s[i-1][j]+s[i][j-1]-s[i-1][j-1]+a[i][j];
//二维差分
a[i][j] = s[i][j]-s[i-1][j]-s[i][j-1]+s[i-1][j-1];

差分用法

用在一维子区间里的数都增减一个固定值,把对于区间内每个数的操作转换为对于差分数组中的端点的操作,时间复杂度降为o(1)。

用在二维子矩阵里的数都增减一个固定值,把对于子矩阵的每个数的操作转换为对应差分二维数组各个端点的操作。

总体思想就是在需要处理的区间范围内增减一个固定值,在影响到的其他范围内需要恢复,即相反操作。

举例

一维差分

差分数组在左端点增加c之后,会影响以其开始前缀和都增加c。所以为了确保只有LR这段增加c,需要从R+1开始减少c,即差分数组在R+1处减去c。

b[l]+=c;
b[r+1]-=c;

image-20230920173203393

二维差分

在 二维差分数组(x1,y1)增加会使得以(x1,y1)(n,m)范围内所有的数都增加c。所以为了确保只有(x1,y1)-(x2,y2)范围内数值增加c,则需要消除绿色部分的影响,做逆向操作。

b[x1][y1] += c;
b[x1][y2+1] -= c; //逆操作1
b[x2+1][y1] -= c;//逆操作2
b[x2+1][y2+1] +=c;//这块区域在逆操作1和2中减了两次,所以需要加上一次

image-20230920173814571

差分使用技巧

朴素思维

正常想法会先接收初始数组的输入,然后再计算每个差分数组。

一维数组
for(int i=1;i<=n;i++){
	cin >> a[i];
	b[i] = a[i]-a[i-1];
}
while(q--){
    int l,r,c;
    cin >>l>>r>>c;
    b[l] +=c;
    b[r+1] -=c;
}
二维数组
for(int i=1;i<=n;i++)
	for(int j=1;j<=m;j++){
		cin >>a[i][j];
		b[i][j] = a[i][j]-a[i-1][j]-a[i][j-1]+a[i-1][j-1];
	}

while(q--){
    int x1,y1,x2,y2,c;
    cin >>x1>>y1>>x2>>y2>>c;
    
    b[x1][y1] +=c;
    b[x1][y2+1] -=c;
    b[x2+1][y1] -=c;
    b[x2+1][y2+1] +=c;
}
	

简化思维

把全0当做初始数组,即初始的差分数组都是0,。接收输入的时候就执行差分数组的修改操作,当接收问询的时候 也当做是执行差分数组的修改操作。这样就不用额外计算差分数组的具体值。

一维数组

void insert(int l,int r,int c){
	b[l] +=c;
    b[r+1] -=c;
}
for(int i=1;i<=n;i++){
	cin >> a[i];
	insert(i,i,a[i]); //起始点i到结束点i,只有一个元素的区间
}
while(q--){
    int l,r,c;
    cin >>l>>r>>c;
    insert(l,r,c);c
}
二维数组
void insert(int x1,int y1,int x2,int y2,int c){
	 b[x1][y1] +=c;
    b[x1][y2+1] -=c;
    b[x2+1][y1] -=c;
    b[x2+1][y2+1] +=c;
}
for(int i=1;i<=n;i++)
	for(int j=1;j<=m;j++){
		cin >>a[i][j];
		insert(i,j,i,j,a[i][j]); //起始点(i,j)到(i,j)只有一个元素的矩阵
	}

while(q--){
    int x1,y1,x2,y2,c;
    cin >>x1>>y1>>x2>>y2>>c;
    insert(x1,y1,x2,y2,c);
   
}

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

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

相关文章

Cordova插件开发:集成南方测绘RTK实现高精度卫星定位

文章目录 1.最终效果预览2.页面持续展示获取的坐标3.公共类utilsTools中封装得获取坐标方法4.南方测绘坐标获取封装5.插件js方法封装6.Java方法封装1.最终效果预览 说明:南方测绘RTK设备厂家提供的SDK中封装了蓝牙搜索连接、Cross账号登录等功能,我们通过Cordova插件进一步封…

Python150题day09

③多条件分支 使用input函数接收用户的输入数据&#xff0c;如果用户输入python&#xff0c;则输出90&#xff0c;如果用户输入java.输出95&#xff0c;如果用户输入php&#xff0c;输出85&#xff0c;其他输入&#xff0c;程序输出0 解答&#xff1a; if...elif...else val…

centos 上安装 kafka 与 python 调用

step0: 环境准备 1、 安装jdk 1.8 以上版本 yum -y install java-1.8.0-openjdk.x86_642、 安装配置ZooKeeper wget https://dlcdn.apache.org/zookeeper/zookeeper-3.8.2/apache-zookeeper-3.8.2-bin.tar.gz --no-check-certificate tar -zxf apache-zookeeper-3.8.2-bin.t…

首购2元起!CDN与加速特惠专场来啦~

还在为内容分发、加速成本发愁吗&#xff1f;看过来&#xff01;火山引擎边缘云CDN与加速特惠专场来啦&#xff01; 限时活动&#xff1a;首购2元起&#xff0c;新老低至7折&#xff01; 限时优惠&#xff01;错过后悔&#xff01;这波折扣实实在在&#xff01; 首购专区 新…

用户体验测试:确保产品满足用户期望的关键步骤

在当今竞争激烈的市场中&#xff0c;为了确保产品的成功和用户的满意度&#xff0c;用户体验测试变得至关重要。通过系统化地评估产品在用户使用过程中的可用性、便利性和满意度&#xff0c;用户体验测试有助于发现潜在问题并改进产品设计。本文将介绍用户体验测试的关键步骤和…

有什么推荐使用的企业上网行为管理软件?

在当今信息化社会&#xff0c;企业的上网行为管理越来越重要。企业上网行为软件是一种能够监控和管理企业员工上网行为的工具&#xff0c;它可以帮助企业更好地管理网络资源&#xff0c;提高工作效率&#xff0c;保护企业信息安全&#xff0c;并符合相关的法律法规。本文将深入…

【煤矿虚拟仿真体验】VR采煤机技能培训有效提高训练效果

在我们的社会中&#xff0c;能源是至关重要的。它是推动我们日常生活和工作的主要动力。然而&#xff0c;我们在获取这种能源的过程中&#xff0c;也带来了许多环境问题。煤矿开采是其中的一个重要部分&#xff0c;因此我们需要寻找更环保、更安全的方式来进行煤矿开采。VR&…

【开发篇】三、web下单元测试与mock数据

文章目录 1、加载测试专用属性2、加载测试专用配置3、测试类中启动web环境4、发送虚拟请求5、匹配&#xff08;断言&#xff09;响应的执行状态6、匹配响应的结果7、匹配响应头8、业务层测试事务回滚9、UT数据设置随机数据 1、加载测试专用属性 写单元测试时&#xff0c;如果需…

PyTorch实战:卷积神经网络详解+Python实现卷积神经网络Cifar10彩色图片分类

目录 前言 一、卷积神经网络概述 二、卷积神经网络特点 卷积运算 单通道&#xff0c;二维卷积运算示例 单通道&#xff0c;二维&#xff0c;带偏置的卷积示例 带填充的单通道&#xff0c;二维卷积运算示例 Valid卷积 Same卷积 多通道卷积计算 1.局部感知域 2.参数共…

常见弱口令汇编

一、OA办公系统常见弱口令 &#xff08;一&#xff09;致远OA system用户&#xff08;默认密码&#xff1a;system&#xff0c;对应A8的系统管理员、A6的单位管理员&#xff09; group-admin&#xff08;默认密码&#xff1a;123456&#xff0c;对应A8集团版的集团管理员&am…

百度知道本地搭建环境无限制采集聚合【最新版】

本工具是本地php环境搭建&#xff0c;根据关键词进行采集聚合某度知道&#xff0c;不限制ip&#xff0c;最新版新添加了违规词过滤&#xff0c;样式处理&#xff0c;自动匹配优质标题等功能&#xff0c;只需要导入关键词可以无限采集&#xff0c;是养站的好帮手&#xff01; 功…

BOM与DOM--记录

BOM基础&#xff08;BOM简介、常见事件、定时器、this指向&#xff09; BOM和DOM的区别和联系 JavaScript的DOM与BOM的区别与用法详解 DOM和BOM是什么&#xff1f;有什么作用&#xff1f; 图解BOM与DOM的区别与联系 BOM和DOM详解 JavaScript 中的 BOM&#xff08;浏览器对…

怎么将几张图片做成pdf合在一起

怎么将几张图片做成pdf合在一起&#xff1f;在我们平时的工作中&#xff0c;图片和pdf都是非常重要的电脑文件&#xff0c;使用也非常频繁&#xff0c;图片能够更为直观的展示内容&#xff0c;而pdf则更加的正规&#xff0c;很多重要文件大多会做成pdf格式的。在职场人的日常工…

ThePASS 研究院|探索 Aragon:开创性的 DAO 基础设施实现全面治理

这篇研究文章由 ThePASS 团队呈献&#xff0c;同时感谢 Aragon Growth Guild 的校对。The PASS 是一个开创性的 DAO 聚合器和搜索引擎&#xff0c;目前是最大的DAO数据来源&#xff0c;在为 DAO 提供洞见和分析方面起着关键作用。 介绍 DAO的诞生源于一个简单的理念&#xff…

BLE Mesh蓝牙mesh传输大数据包传输文件照片等大数据量通讯

1、BLE Mesh数据传输现状 BLE Mesh网络技术是低功耗蓝牙的一个进阶版&#xff0c;Mesh扩大了蓝牙在应用中的规模和范围&#xff0c;因为它同时支持超过三万个网络节点&#xff0c;可以跨越大型建筑物&#xff0c;不仅可以使得医疗健康应用更加方便快捷&#xff0c;还能监测像学…

前端三件套速成

一、HTML 1、基本的文档结构 <!doctype html> <html lang"en-US"><head><meta charset"utf-8" /><meta name"viewport" content"widthdevice-width" /><title>My test page</title></…

API文档搜索引擎

导航小助手 一、认识搜索引擎 二、项目目标 三、模块划分 四、创建项目 五、关于分词 六、实现索引模块 6.1 实现 Parser类 6.2 实现 Index类 6.2.1 创建 Index类 6.2.2 创建DocInfo类 6.2.3 创建 Weight类 6.2.4 实现 getDocInfo 和 getInverted方法 6.2.5 实现 …

解析数据库的“四世同堂”,畅聊数据前沿技术!

引言 数据库与大数据一直是技术圈的两个常青领域。PC 时代诞生了最早的关系型数据库&#xff0c;之后数据类型越来越多&#xff0c;出现了各种非关系型数据库。云时代拉开序幕的同时&#xff0c;“大数据”一词也被广泛使用&#xff0c;涵盖海量数据的采集、处理、存储、分析和…

【数模研赛思路】2023华为杯研究生数学建模竞赛选题建议及CDEF题思路

大家好呀&#xff0c;全国研究生数学建模竞赛今天早上开赛啦&#xff0c;在这里先带来初步的选题建议及思路。 目前团队正在写E题完整论文&#xff0c;此外C已经完成了第一问代码及结果&#xff0c;本文章只是一个比较粗略的文字版思路&#xff0c;更加详细的半小时视频讲解版…

React 全栈体系(十二)

第六章 React UI 一、流行的开源 React UI 组件库 1. material-ui(国外) 官网: http://www.material-ui.com/#/github: https://github.com/callemall/material-ui 2. ant-design(国内蚂蚁金服) 官网: https://ant.design/index-cnGithub: https://github.com/ant-design/…