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