一维差分
前缀和的逆运算
题目:
java
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
// 输入 n 和 m
int n = sc.nextInt();
int m = sc.nextInt();
// 数组定义
int[] a = new int[n + 1]; // a[1] 到 a[n] 为有效数据
int[] b = new int[n + 1]; // b[1] 到 b[n] 为有效数据
// 输入数组 a
for (int i = 1; i <= n; i++) {
a[i] = sc.nextInt();
}
// 初始化差分数组 b
for (int i = 1; i <= n; i++) {
insert(b, i, i, a[i]);
}
// 处理 m 次区间操作
while (m-- > 0) {
int l = sc.nextInt();
int r = sc.nextInt();
int c = sc.nextInt();
insert(b, l, r, c);
}
// 计算并输出最终结果
for (int i = 1; i <= n; i++) {
b[i] += b[i - 1];
System.out.print(b[i] + " ");
}
sc.close();
}
// 区间更新操作
private static void insert(int[] b, int l, int r, int c) {
b[l] += c;
if (r + 1 <= b.length - 1) {
b[r + 1] -= c;
}
}