TB椰程 TypeBuddy 打字搭子

差分

CSP-J · 编程模板 · 片段 · cpp · 难度 3/5 · 共 576 字

区间加法利器,记录两头变化再前缀和还原

  • 算法
  • 差分

前置内容

正文

// 差分:区间加法的利器
// 对区间 [l,r] 都 +v
// 不必逐位加,记录两头变化
// 最后前缀和还原数组
#include <cstdio>
long long d[100005], a[100005];
int n, m, l, r;
long long v;
int main() {
    scanf("%d%d", &n, &m);
    // 读入并构造差分数组
    for (int i = 1; i <= n; i++) {
        scanf("%lld", &a[i]);
        d[i] = a[i] - a[i - 1];
    }
    // 区间加:左端点 +v
    while (m--) {
        scanf("%d%d%lld", &l, &r, &v);
        d[l] += v;
        // 右端点右侧 -v 抵消
        d[r + 1] -= v;
    }
    // 前缀和还原原数组
    for (int i = 1; i <= n; i++) {
        d[i] += d[i - 1];
        printf("%lld ", d[i]);
    }
    return 0;
}

CSP-J · 编程模板的其它内容

打字首页 · 词库画廊 · 编程打字 · 指法入门 · 天梯榜 · 数据分析 · 班级课堂 · 关于我们
椰程 TypeBuddy 打字搭子 —— 键盘指法练习 · 单词记忆 · 班级课堂 · 在线 PK