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

差分数组详解[通俗易懂]题目:来先看一道裸题,有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)
全栈程序员-站长的头像全栈程序员-站长

相关推荐

  • 公网RTSP视频流「建议收藏」

    公网RTSP视频流「建议收藏」公网RTSP视频流测试地址:rtsp://wowzaec2demo.streamlock.net/vod/mp4:BigBuckBunny_115k.mov

    2022年10月18日
  • java jersey 参数_Java Jersey:接收表单参数作为字节数组

    java jersey 参数_Java Jersey:接收表单参数作为字节数组我试过如下:@Path(“/someMethod”)@POST@Produces(MediaType.TEXT_HTML)@Consumes(MediaType.APPLICATION_FORM_URLENCODED)publicStringsomeMethod(@FormParam(“someParam”)byte[]someParam){return””;}但得到这个错误:如果我改变…

    2022年7月14日
  • webstrom激活码2021[最新免费获取]「建议收藏」

    (webstrom激活码2021)JetBrains旗下有多款编译器工具(如:IntelliJ、WebStorm、PyCharm等)在各编程领域几乎都占据了垄断地位。建立在开源IntelliJ平台之上,过去15年以来,JetBrains一直在不断发展和完善这个平台。这个平台可以针对您的开发工作流进行微调并且能够提供…

    2022年3月27日
  • android的四大组件_android sdk是什么

    android的四大组件_android sdk是什么android四大组件分别为activity、service、contentprovider、broadcastreceiver。一、android四大组件详解1、activity(1)一个Activity通常就是一个单独的屏幕(窗口)。(2)Activity之间通过Intent进行通信。(3)android应用中每一个Activity都必须要在AndroidManif

    2022年10月22日
  • matlab中表示拉普拉斯分布_拉普拉斯分布的随机数[通俗易懂]

    matlab中表示拉普拉斯分布_拉普拉斯分布的随机数[通俗易懂]一、功能产生拉普拉斯分布的随机数。二、方法简介1、产生随机变量的组合法将分布函数\(F(x)\)分解为若干个较为简单的子分布函数的线性组合\[F(x)=\sum_{i=1}^{K}p_{i}F_{i}(x)\]其中$p_{i}>0\(\foralli)$,且$\sum_{i=1}^{K}p_{i}=1$,\(F(x)\)是分布函数。定理若随机变量\(\xi\sim…

    2022年10月28日
  • es6模板字符串里用html标签,为ES6模板字符串计算标签函数[通俗易懂]

    es6模板字符串里用html标签,为ES6模板字符串计算标签函数[通俗易懂]Python部落(python.freelycode.com)组织翻译,禁止转载,欢迎转发。这篇博客描述了你可以通过函数为ES6模板字符串做些什么从而获取返回值。对于一篇针对模板字符串的介绍来说,标记的模板字符串和函数需要在《探索ES6》中查询模板字符串章节1.通过模板字符串获取返回值在JavaScript中获取一个值最普遍的方法就是在括号中加上参数。在ES6中,你可以通过模板字符串更多地获取返回…

    2022年8月21日

发表回复

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

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