前缀和差分

news/2024/10/30 9:31:10/

前缀和

前缀和:一段序列里的前n项和

给出n个数,在给出q次问询,每次问询给出L、R,快速求出每组数组中一段L至R区间的和

给出一段数组,每次问询为求出l到r区间的和

普通方法:L到R进行遍历,那么在每次求区间和的过程中时间复杂度为O(n),q次问询时间复杂度为O(q*n)

前缀和:建立前缀和数组,sum[i]=sum[i-1]+arr[i]。(i-1存在越界的问题,所以i从1开始遍历)

              计算L到R的区间和,包括arr[L]和arr[R]两个值(边界值),区间和=arr[R]-arr[L-1]

              时间复杂度从O(q*n)降至O(q*1)

二维前缀和

二维前缀和数组是原数组它本身位置的数及其左上角全部的数

二维前缀和的应用:求二维数组中arr[x1][y1]到arr[x2][y2]区间内的数之和 

差分

给出n个数,再给出q次问询,每次问询给出L、R、X,要求在L到R上每一个值都加上X,直到最后输出这个数组 

普通方法:遍历,时间复杂度为O(q*n)

差分:建立差分数组,difference[i]=arr[i]-arr[i-1],arr[i]=difference[i]+arr[i-1]。

        (同样i从1开始遍历)

          时间复杂度从O(q*n)降至O(q*1)

数组arr

111111

差分数组difference

100000

此时,L=2,R=4,X=1

操作方式:difference[L]=difference[L]+X,影响L之后的数字

                  difference[R+1]=difference[R+1]-X,避免影响R+1以及之后的数字

操作后的差分数组difference

1100-10

还原后的数组arr

122211

二维差分

一维差分修改差分数组中的某个数,影响的是原数组它本身及其之后的数

二维差分修改差分数组中的某个数,影响的是原数组它本身及其右下角全部的数

二维差分的应用:对以 x1, y1 为左上角, x2, y2 为右下角的矩阵插入一个值 / 修改值


http://www.ppmy.cn/news/991460.html

相关文章

【Vscode | R | Win】R Markdown转html记录-Win

Rmd文件转html R语言环境Vscode扩展安装及配置配置radian R依赖包pandoc安装配置pandoc环境变量验证是否有效转rmd为html 注意本文代码块均为R语言代码,在R语言环境下执行即可 R语言环境 官网中去下载R语言安装包以及R-tool 可自行搜寻教程 无需下载Rstudio Vscod…

linux---文件操作

1.文件路径定位 # /bin, /sbin, /lib, /lib64都以软链接的形式链接到/usr/目录下 /bin –> /usr/bin /sbin –> /usr/sbin lib -> usr/lib lib64 -> usr/lib64# 路径非常重要,名字一样,单不一定是一个文件# 相对路径: 相对于当前文件&#…

Unity UGUI的Outline(描边)组件的介绍及使用

Unity UGUI的Outline(描边)组件的介绍及使用 1. 什么是Outline(描边)组件? Outline(描边)组件是Unity UGUI中的一种特效组件,用于给UI元素添加描边效果。通过设置描边的颜色、宽度和模糊程度,可以使UI元素在视觉上更加突出。 2. Outline(描…

【leetcode】977. 有序数组的平方(easy)

给你一个按 非递减顺序 排序的整数数组 nums,返回 每个数字的平方 组成的新数组,要求也按 非递减顺序 排序。 示例 1: 输入:nums [-4,-1,0,3,10] 输出:[0,1,9,16,100] 解释:平方后,数组变为 […

linux nginx 布置方案

一、安装前的准备 1 安装编译工具(nginx安装之前需要编译) yum install -y gcc gcc-c2安装PCRE #2.1下载wget http://downloads.sourceforge.net/project/pcre/pcre/8.35/pcre-8.35.tar.gz#2.2 解压tar -zxvf pcre-8.35.tar.gz#2.3进入目录cd pre-8.3…

ROS中使用RealSense-D435

文章目录 D435简介RealSense的SDK2.0安装方法1:直接利用安装源安装注册服务器公匙将服务器添加到存储库列表安装库 方法2:利用源码安装GitHub下载librealsense安装编译依赖运行脚本cmake编译 软件显示 ROS接口安装启动节点查看话题rviz显示点云 Python接…

一、SpringBoot基础[日志]

一、日志 解释:SpringBoot使用logback作为默认的日志框架,其中还可以导入log4j2等优秀的日志框架 1.修改日志内容 修改整个日志格式:logging.pattern.console%d{yyyy-MM-dd HH:mm:ss} %-5level [%thread] %logger{15} 你好 %msg%n %d{yyy…

华为openGauss数据库入门 - gsql用法

目录 1.1 gsql的语法 1.2 gsql常用选项 1.2.1 最常用的必要选项 1.2.2 -r选项 1.2.3 -E选项 1.2.4 -t选项 1.2.5 -A选项 1.2.6 -v选项 1.2.7 -c选项 1.2.8 -f选项 1.2.9 -q选项 1.3 gsql的元命令 1.3.1 \l命令 1.3.2 \du命令和\dg命令 1.3.3 \db命令 1.3.4 \d…