差分数组详解[通俗易懂]

差分数组详解[通俗易懂]题目:来先看一道裸题,有n个数。m个操作,每一次操作,将x~y区间的所有数增加z;最后有q个询问,每一次询问求出x~y的区间和。思路:很明显,直接用前缀和无法快速满足这个操作,所以我们就用到了查分数组。设a数组表示原始的数组;设d[i]=a[i]-a[i-1](1<i≤n,d[1]=a[1]);设f[i]=f[i-1]+d[i](1<i≤n,f[1]=d[1]=a[1]);设sum[i…

大家好,又见面了,我是你们的朋友全栈君。

题目:

来先看一道裸题,有n个数。

m个操作,每一次操作,将x~y区间的所有数增加z;

最后有q个询问,每一次询问求出x~y的区间和。

思路:

很明显,直接用前缀和无法快速满足这个操作,所以我们就用到了查分数组。

设a数组表示原始的数组;

设d[i]=a[i]-a[i-1](1<i≤n,d[1]=a[1]);

设f[i]=f[i-1]+d[i](1<i≤n,f[1]=d[1]=a[1]);

设sum[i]=sum[i-1]+f[i](1<i≤n,sum[1]=f[1]=d[1]=a[1])。

则易知差分数组详解[通俗易懂]

举个例子,我们求1~3的区间和.

差分数组详解[通俗易懂]

后面的可以依次类推。

那么,对于一个操作,我们可以让d[x]加上z,让d[y+1]减小z,就可以了。

还用刚才的例子。

差分数组详解[通俗易懂]

后面的可以依次类推。

代码:

#include<cstdio>
	int n,m,q;
	int a[100000],d[100000],f[100000],sum[100000];
int main()
{
	int x,y,z;
	scanf("%d %d %d",&n,&m,&q);
	for(int i=1;i<=n;i++)
	{
		scanf("%d",&a[i]);
		d[i]=a[i]-a[i-1];
	}
	for(int i=1;i<=m;i++)
	{
		scanf("%d %d %d",&x,&y,&z);
		d[x]+=z;
		d[y+1]-=z;
	}		
	for(int i=1;i<=n;i++)
	{
		f[i]=f[i-1]+d[i];
		sum[i]=sum[i-1]+f[i];
	}
	for(int i=1;i<=q;i++)
	{
		scanf("%d %d",&x,&y);
		printf("%d\n",sum[y]-sum[x-1]);
	}
}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/133084.html原文链接:https://javaforall.net

(0)
上一篇 2022年6月9日 下午8:00
下一篇 2022年6月9日 下午8:16


相关推荐

  • AI Agents 智能体工作流的核心组成、模式、应用场景及案例

    AI Agents 智能体工作流的核心组成、模式、应用场景及案例

    2026年3月15日
    2
  • linux 命令:nohup 详解

    linux 命令:nohup 详解nohup 命令的功能是在不挂端的情况下执行命令 默认会输出一个 nohup out 的文件

    2026年3月26日
    2
  • Claude 4 vs ChatGPT-4.5 全面对比

    Claude 4 vs ChatGPT-4.5 全面对比

    2026年3月15日
    6
  • 禁止百度爬虫_百度爬虫抓取规则

    禁止百度爬虫_百度爬虫抓取规则在百度C2C产品“百度有啊”即将上线的时候,淘宝网站曾经屏蔽百度搜索爬虫,禁止百度搜索引擎抓取淘宝网站的网页内容,淘宝官方的解释是“杜绝不良商家欺诈”。在技术层面,淘宝屏蔽百度的方法是,在网站的robots.txt文件中加上如下内容:User-agent:BaiduspiderDisallow:/但实际上这种方法并不能完全屏蔽百度的爬虫,至今在百度上输入si

    2025年7月30日
    6
  • Origin简单绘图

    Origin简单绘图一、从cadence导出数据仿真生成波形之之后,鼠标选中波形,右击—>SendTo—>Export,进行csv数据的保存。打开该csv文件,删掉第一行,第一行是是横纵坐标的标识,左侧第一列是横坐标值,右侧列是纵坐标值。二、origin简单绘图双击图标打开origin导入csv数据可选中多个csv文件导入为了让两个csv的数据同时显示,在弹出的对话框进行以下操作(默认第二个csv数据会覆盖第一个csv数据)。设置好之后点击“确定”,两个csv数据均被导入到了o

    2022年6月1日
    40
  • pytorch ocr 数字识别库_pytorch handbook

    pytorch ocr 数字识别库_pytorch handbook实时姿态估计网络:https://github.com/Sierkinhane/AtrousPose简单单人跟踪:https://github.com/Sierkinhane/human_tracker(基于目标检测与特征映射算法)演示视频:https://www.bilibili.com/video/av44360925新写的关于人脸检测算法MTCNN的文章https://……

    2025年10月30日
    6

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号