#include <bits/stdc++.h>
using namespace std;
 
struct DifferenceArray {
  vector<long long> diff, arr;
  int n;
 
  // Initialize with original array
  DifferenceArray(vector<int>& a) {
    n = a.size();
    diff.resize(n + 1, 0);
    arr = vector<long long>(a.begin(), a.end());
    build();
  }
 
  void build() {
    diff[0] = arr[0];
    for (int i = 1; i < n; i++) diff[i] = arr[i] - arr[i - 1];
  }
 
  // Add val to range [l,r]
  void update(int l, int r, long long val) {
    diff[l] += val;
    if (r + 1 < n) diff[r + 1] -= val;
  }
 
  // Get final array after updates
  vector<long long> getArray() {
    vector<long long> res(n);
    res[0] = diff[0];
    for (int i = 1; i < n; i++) res[i] = res[i - 1] + diff[i];
    return res;
  }
 
  // Get value at index after updates
  long long getValue(int idx) {
    long long sum = 0;
    for (int i = 0; i <= idx; i++) sum += diff[i];
    return sum;
  }
};
 
int main() {
  vector<int> arr = {1, 2, 3, 4, 5};
  DifferenceArray d(arr);
 
  // Add 2 to range [1,3]
  d.update(1, 3, 2);
 
  // Add -1 to range [2,4]
  d.update(2, 4, -1);
 
  vector<long long> result = d.getArray();
  // result: [1, 4, 5, 5, 4]
 
  cout << d.getValue(3) << "\n";  // prints 5
  return 0;
}