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

差分数组详解[通俗易懂]题目:来先看一道裸题,有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]);
	}
}

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • dede列表标签list:应用大全 {dede:list}

    dede列表标签list:应用大全 {dede:list}

  • idea2021.3.15激活 3月最新注册码

    idea2021.3.15激活 3月最新注册码,https://javaforall.cn/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

  • Flash动画制作实例教程

    Flash动画制作实例教程1、该资料见网址:http://www.webjx.com/htmldata/2007-07-26/1185439125.html2、http://www.enet.com.cn/eschool/includes/zhuanti/flash1130/3、http://www.webjx.com/htmldata/2007-10-04/119151291…

  • kindeditor教程_pdf editor怎么用

    kindeditor教程_pdf editor怎么用今天群里的朋友问我能不能写个kindEditor编辑器的使用教程,说是弄了半天没有搞定。由于PHP啦后台正好用了这个编辑器,我有写经验,正好教他的同时写出来分享给大家kindEditor编辑器是一个由JS写成的在线编辑器,很多网站或CMS等都有用它,口碑不错,目前最新版本是4.1.10。其实它的用法非常简单,我是在下载了它的安装包后看了一些demo然后就把它放到PHP啦的后台上去了。好

    2022年10月12日
  • VC中的字符串转换宏

    VC中的字符串转换宏

  • mybatis interceptor原理_mybatis拦截器获取表名

    mybatis interceptor原理_mybatis拦截器获取表名看了很多博客文章和,mybatis的拦截器概念还是不能很好理解,可能是因为自己基础不好或者理解方式和他人不同吧,所以决定自己花时间好好捋捋,然后把理解后的总结记录下来,供他人参考,也许你们的理解和我也不同,但是不妨花几分钟时间看看,说不定能帮助你文章主要是讲解org.apache.ibatis.plugin包下的Interceptor类和org.apache.ibatis….

发表回复

您的电子邮箱地址不会被公开。

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