数列游戏
Description
给定一个长度为N的序列,首先进行A次操作,每次操作在Li和Ri这个区间加上一个数Ci。然后有B次询问,每次询问Li到Ri的区间和。
初始序列都为0。
Input
对于每组数据,第一行三个整数N A B。(1<=N<=1000000,1<=A<=N,A<=B<=N)
接下来A行,每行三个数Li Ri Ci。(1<=Li<=N,Li<=Ri<=N,|Ci|<=100000000000000)。
接下来B行,每行两个数 Li Ri。范围同上。
Output
对于每次询问,输出一行一个整数。因为最后的结果可能很大,请对结果mod 1000000007。
Sample Input
5 1 1 1 3 1 1 4
Sample Output
3
思路:
如果我们按照暴力的方法来,每次修改都对r到l区间增加c的话,那么答案是肯定的:Time Limit Exceeded(时间超时),注意一下啊,这道题不是边增加区间的值边询问的,而是将所有l到r的区间都增加了之后,才开始询问的,所以,我们只需要维护一个差分数组就可以了。
怎么维护呢?其实很简单,只需要O(2)的时间,如果将L到R的区间增加C,那么我们只需要对差分数组D的D[L]和D[R+1]进行操作就可以了,怎么操作呢?我们来举一个例子:A为1,2,3,4,5,那么A的差分数组D应该是1,1,1,1