时间限制: 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
我们会发现当将原始数组中某区间中的元素同时加或者减某个数,它的差分数组对应的区间左端点的值会同步变化,而右端点的后一个值则会相反地变化。
既然我们要对区间进行修改,那么差分数组的作用就是求多次进行区间修改后的数组。