797. 差分(模板题)

AcWing 797. 差分

  • 题目
  • 思路
    • 代码

题目传送门

题目

输入一个长度为n的整数序列。

接下来输入m个操作,每个操作包含三个整数l, r, c,表示将序列中[l, r]之间的每个数加上c。

请你输出进行完所有操作后的序列。

输入格式

第一行包含两个整数n和m。

第二行包含n个整数,表示整数序列。

接下来m行,每行包含三个整数l,r,c,表示一个操作。

输出格式

共一行,包含n个整数,表示最终序列。

数据范围

1 ≤ n , m ≤ 100000 , 1 ≤ l ≤ r ≤ n , − 1000 ≤ c ≤ 1000 , − 1000 ≤ 整 数 序 列 中 元 素 的 值 ≤ 1000 1≤n,m≤100000 ,\\ 1≤l≤r≤n,\\ −1000≤c≤1000,\\ −1000≤整数序列中元素的值≤1000 1n,m100000,1lrn,1000c1000,10001000

输入输出样例

样例输入1

6 3
1 2 2 1 2 1
1 3 1
3 5 1
1 6 1

样例输出1

3 4 5 3 4 2

思路

代码

#include
using namespace std;
const int N = 1e5 + 10;
int n, m, a[N], b[N], l, r, c;
void insert(int l, int r, int c) {
     
    b[l] += c;
    b[r + 1] -= c;
    return;
}
int main() {
     
    cin >> n >> m;
    for(int i = 1; i <= n; i++) {
     
        cin >> a[i];
        insert(i, i, a[i]);
    }
    while(m--) {
     
        cin >> l >> r >> c;
        insert(l, r, c);
    }
    for(int i = 1; i <= n; i++) {
     
        a[i] = a[i - 1] + b[i];
        printf("%d ", a[i]);
    }
    return 0;
}

你可能感兴趣的:(基础算法)