AcWing 797. 差分 【c++详细题解】 - AcWing
差分在解决一个数组[l,r]中间的每个元素全部加上一个常数c的问题上有很大的优势,差分是前缀和的逆运算,在实际解题过程中,往往差分和前缀和同时使用。
#include#include using namespace std; int n, m, l, r, c; int a[100001]; int b[100001]; int main() { cin >> n >> m; for (int i = 1; i <= n; i++) { cin >> a[i];//注意始终原数组是a b[i] = a[i] - a[i - 1];//我们只是想办法构建一个b数组,然后在b数组的基础上去加常数 } while (m--) { cin >> l >> r >> c; b[l] += c; b[r + 1] -= c;//打补丁 } for (int i = 1; i <= n; i++) { a[i] = a[i - 1] + b[i];//实际上这里就是在求新的数组了,前缀和的操作 cout << a[i] << " "; } return 0; }
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)