差分是什么
约 8 分钟
差分是前缀和的“逆运算”:它记录每个数与前一个数的差。设原数列 ,差分数列
第一个照抄,后面每个减去前一个。比如 的差分是 (;;)。
d[1] = a[1];
for (int i = 2; i <= n; i++)
d[i] = a[i] - a[i-1];
奇妙的是它俩互为逆:对差分数列再求一次前缀和,就变回原数列。
// 差分求前缀和,还原 a
a[0] = 0;
for (int i = 1; i <= n; i++) a[i] = a[i-1] + d[i];
差分本身看着没啥用,真正的威力在下一节:它能把“给一整段区间都加同一个值”变成只改两个位置的事。
小纸条
数列 1、3、6 的差分依次是多少?
登录 后可看答案