测评会员优惠活动进行中 · 开通 VIP,有效期内测评不限次 VIP 优惠中 · 测评不限次 立即查看

A18830. 基础区间修改

填空题 较难

题目描述

基础区间修改

题目描述

给定一个长度为 n 的初始全0数组,进行 m 次操作,每次操作给出 l, r, k,表示将区间 [l, r] 的所有元素加上 k。所有操作结束后,输出最终的数组。

输入格式

第一行两个整数 n, m(1≤n,m≤100000)

接下来 m 行,每行三个整数 l, r, k(1≤l≤r≤n,-1000≤k≤1000)

输出格式

一行n 个整数,表示修改后的数组,元素之间用空格分隔

样例输入

5 2
1 3 2
2 4 -1

样例输出

2 1 1 -1 0

参考答案

#include <iostream> #include <vector> using namespace std; const int N = 100010; long long d[N]; // 差分数组,开long long防溢出 int main() { ios::sync_with_stdio(false); cin.tie(0); // 快读优化,适配大数据 int n, m; cin >> n >> m; while(m--) { int l, r, k; cin >> l >> r >> k; d[l] += k; d[r+1] -= k; } // 前缀和还原数组 long long res = 0; for(int i = 1; i <= n; i++) { res += d[i]; cout << res << " "; } return 0; }
上一题 下一题