C 已经学会了前缀和,于是决定进一步向喵喵学习差分。
差分操作可以看做是前缀和操作的逆运算 ,即, 。
通俗来说,如果想对数组 a 的某一区间进行加或减操作,我们可以遍历对区间的每一个数进行加减操作,但是这样面对特殊的大数据时会无法处理;于是我们可以采用差分,仅在区间的开头标记加一个数,同时在区间的结束标记减去相同的数,代表加的这个数仅在区间范围内生效。
差分操作能够解决某些前缀和处理不了的特殊的大数据,利用差分的形式实现离散化的操作。
例如:想要对数组 a 的 [l, r] 区间 +k ,则可以转换为在一个数组 b 的 l 位置加 k,同时在 b 的 r + 1 的位置减 k 。
注意到,假如对差分数组 b 进行前缀和操作,则可得到原数组 a 。
小 C 掌握差分技巧后,喵喵马上又出了一道题目来考验他:
在小 C 学习前缀和时候,喵喵记录了他每个时间增加的掌握度数组 a ,同时对数组 a 进行前缀和操作得到了数组 b 。但是粗心的喵喵忘记了保留原数组 a 的备份,于是来需求你的帮助。喵喵将把数组 b 交给你,请你帮他计算出原数组 a
n ( 1 ≤ n ≤ 105 ),表示数组 b 的长度。
第二行输入 n 个整数 b1, b2, ……, bn ( 1 ≤ bi ≤ 105 ),每个整数间用一空格分开,表示数组 b 的各个元素。
第一行前缀和数组 b 的 n 个元素,每个数之间用一个空格分隔。
第二行原数组 a 的 n
5
1 3 6 10 15
1 3 6 10 15
1 2 3 4 5