[蓝桥杯][算法提高VIP]分苹果

时间限制: 1Sec 内存限制: 128MB 提交: 1996 解决: 568

题目描述
小朋友排成一排,老师给他们分苹果。
小朋友从左到右标号1…N。有M个老师,每次第i个老师会给第Li个到第Ri个,一共Ri-Li+1个小朋友每人发Ci个苹果。
最后老师想知道每个小朋友有多少苹果。

数据规模和约定
100%的数据,N、M≤100 000,1≤Li≤Ri≤N,0≤Ci≤100。

输入
第一行两个整数N、M,表示小朋友个数和老师个数。
接下来M行,每行三个整数Li、Ri、Ci,意义如题目表述。
输出
一行N个数,第i个数表示第i个小朋友手上的水果。
样例输入
5 3
1 2 1
2 3 2
2 5 3
样例输出
1 6 5 3 3
思路:这里数据量可能会比较大,因此我们用平常的两次循环嵌套肯定会超时的。题目中我们可以知道发苹果时,每组区间之间都是连续的发,因此我们可以想到用差分数组的知识。
我先说一下什么是差分数组。

差分数组首先是个数组,差分其实就是相邻数据之间的差,什么数据的差呢?就是原始数组的相邻元素之间的差值,我们令 d[i]=a[i+1]-a[i]
一遍循环即可将差分数组求出来。

下面是就是一个差分数组
在这里插入图片描述其实差分数组是一个辅助数组,从侧面表示给定数组的数据变化,一般用来对数组进行区间修改的操作。
对于上面例子中的差分数组,我们进行以下操作:

将区间【1,4】的数值全部加上3

在这里插入图片描述

我们会发现当将原始数组中某区间中的元素同时加或者减某个数,它的差分数组对应的区间左端点的值会同步变化,而右端点的后一个值则会相反地变化。

既然我们要对区间进行修改,那么差分数组的作用就是求多次进行区间修改后的数组。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

乔梦圆的博客

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值