Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- vector<int> findPrefixSums(const vector<int>& a) {
- int n = a.size();
- vector<int> prefixSums(n + 1, 0);
- for (int i = 0; i < n; i++) {
- prefixSums[i + 1] = prefixSums[i] + a[i];
- }
- return prefixSums;
- }
- vector<int> findDiffsArray(const vector<int>& arr) {
- int n = arr.size();
- vector<int> diffs(n - 1);
- for (int i = 0; i < n - 1; i++) {
- diffs[i] = arr[i + 1] - arr[i];
- }
- return diffs;
- }
- vector<int> precalc(vector<int> b) {
- b.insert(b.begin(), 0); // add leading zero
- vector<int> a = findDiffsArray(b);
- return a;
- }
- vector<int> postcalc(const vector<int>& a) {
- vector<int> finalB = findPrefixSums(a);
- finalB.erase(finalB.begin()); // delete leading zero
- return finalB;
- }
- int main() {
- int n;
- cin >> n;
- vector<int> b(n);
- for (int &val : b) {
- cin >> val;
- }
- vector<int> diffArr = precalc(b);
- auto addOnHalfInterval = [&](int left, int right, int d) { // [left, right) += d
- diffArr[left] += d;
- if (right < n) {
- diffArr[right] -= d;
- }
- };
- int queriesNumber;
- cin >> queriesNumber;
- for (int i = 0; i < queriesNumber; i++) {
- int l, r;
- int d;
- cin >> l >> r >> d;
- l--;
- addOnHalfInterval(l, r, d);
- }
- vector<int> finalB = postcalc(diffArr);
- for (int val : finalB) {
- cout << val << ' ';
- }
- cout << endl;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement