题解 | 【模板】差分

#include <iostream>
#include <vector>
using namespace std;

//此题中,由于是在连续数据中增减同一个数值,因此选中区间内,元素之间的差不会改变,以此原理减少运算复杂度

int main() {
    int n, m, l, r;
    long int k, tmp;
    cin >> n >> m;
    vector<long int> a(n+1, 0);//a存储输入的数组
    vector<long int> subtract(n+1, 0);//subtract存储每一项与上一项的差
    for(int i = 1; i <= n ; i++){
        cin >> a[i];
        subtract[i] = a[i] - a[i-1];
    }
    for(int i = 0; i < m; i++){
        cin >> l >> r >> k;
        subtract[l] += k;//a[l]与a[l-1]的差值会增加k
        subtract[r+1] -= k;//a[r+1]与a[r]的差值会减少k
    }
    tmp = 0;
    for(int i = 1; i <= n; i++){
        tmp = tmp + subtract[i];
        cout << tmp << ' ';
    }
    return 0;
}
// 64 位输出请用 printf("%lld")

全部评论

相关推荐

面了100年面试不知...:太礼貌,还是
点赞 评论 收藏
分享
阿武同学:基本信息保留前面三行,其他的可以全部删掉,邮箱最重要的你没写,主修课程精简到8个以内,实习里面2/3/4都是水内容的,非要写的话建议两到三句话,项目经历排版优化下,自我评价缩到三行
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务