// 等差数列差分
// n个 0的数组成的数组arr 进行m个操作
// 每个操作都让你 从l-r范围加上 首项为s 末项为e 公差为d 的等差数列
// 等差数列差分推演过程
// 假设让2-6 加上首项为s 末项为e 公差为d 的等差数列
// 怎么样的操作才可以的到最终的结果
//我们来进行以下反推
// [0,0,S,-S+d,0,0,0,-e-d,e,0]
// [0,1,2, 3 ,4,5,6, 7 ,8,9] 下标 第二次反推
//反推 ⬆
// [0,0,S,d,d,d,d,-e ,0,0]
// [0,1,2,3,4,5,6, 7 ,8,9] 下标 第一次反推
// 反推 ⬆
// [0,0,S,S+d,S+2d,S+3d,e,0,0,0] e=S+4d e是末项
// [0,1,2, 3 , 4 , 5 ,6,7,8,9] 下标 最终结果
// 我们知道最终数组是差分数组的前缀和数组
// 那么我们从最终数组进行反推
// 通过反推两次前缀和 得到了差分数组
// 由此可见我们应该进行以下操作
// arr[l]+=S arr[l+1]+=d-s arr[r+1]-=e+d arr[r+2]+=e
// 再对数组求两次前缀和就可以得到最终数组
//
//
// 先进行set函数操作
// 在进行 build 操作
// set操作函数
public static void set(int []arr,int s,int d,int e,int r,int l){
arr[l]+=s;
arr[l+1]+=d-s;
arr[r+1]-=e+d; //arr[r+1]+=-e-d
arr[r+2]+=e;
}
// 求两边前缀和方法
public static void build(int [] arr){
for(int =1;i<=n;i++){
arr[i]+=arr[i-1];
}
for(int =1;i<=n;i++){
arr[i]+=arr[i-1];
}
}
}