#include <bits/stdc++.h>
using namespace std;
template <typename T>
struct compF {
  bool operator()(const pair<T, T> &a, const pair<T, T> &b) {
    return a.first < b.first;
  }
};
template <typename T>
struct compS {
  bool operator()(const pair<T, T> &a, const pair<T, T> &b) {
    return a.second < b.second;
  }
};
template <typename T>
void printMatrix(const string &txt, vector<vector<T>> &a) {
  cout << txt;
  for (int i = 0; i < a.size(); ++i) {
    for (int j = 0; j < a[i].size(); ++j) cout << a[i][j] << ' ';
    cout << endl;
  }
}
template <typename T>
void printVector(const string &txt, vector<T> &a) {
  cout << txt;
  for (int i = 0; i < a.size(); ++i) cout << a[i] << ' ';
  cout << endl;
}
template <typename T>
void readVector(int n, vector<T> &a) {
  if (a.size() < n) a.resize(n);
  for (int i = 0; i < n; ++i) cin >> a[i];
}
template <typename T1, typename T2>
bool exist(map<T1, T2> &m, T1 x) {
  if (m.find(x) == m.end()) return false;
  return true;
}
long long gcd(long long a, long long b) {
  while (a != 0 && b != 0) {
    if (b > a)
      b %= a;
    else
      a %= b;
  }
  return a + b;
}
long long minFactor(long long x) {
  for (long long i = 2; i * i <= x; ++i)
    if (x % i == 0) return i;
  return x;
}
long long allFactors(long long x, vector<long long> &prms,
                     vector<long long> &prm_cnt) {
  prms.clear();
  prm_cnt.clear();
  while (x > 1) {
    long long t = minFactor(x);
    prms.push_back(t);
    int s = prms.size() - 1;
    prm_cnt.push_back(0);
    while (x % t == 0) {
      x /= t;
      ++prm_cnt[s];
    }
  }
  return 0;
}
int n;
vector<long long> a;
long long fun(long long x, long long y) {
  long long diff = x - y;
  if (diff < 0) return -((abs(x - y) + 1) / 2);
  return diff / 2;
}
long long t = 0;
long long a1 = 0;
long long change(long long ind, long long x) {
  if (ind >= n) return 0;
  if (a[ind] > 0) t -= a[ind];
  a[ind] += x;
  if (a[ind] > 0) t += a[ind];
}
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie();
  cin >> n;
  readVector(n, a);
  for (int i = 1; i < n; ++i) t += max(a[i] - a[i - 1], 0ll);
  long long b1 = fun(a[0], t);
  long long bn = b1 + t;
  cout << max(bn, a[0] - b1) << endl;
  int q;
  cin >> q;
  long long l, r, x;
  for (int i = n - 1; i > 0; --i) a[i] = a[i] - a[i - 1];
  long long a1 = a[0];
  long long t0 = t;
  while (q--) {
    cin >> l >> r >> x;
    --l;
    --r;
    if (l == 0)
      a1 += x;
    else
      change(l, x);
    change(r + 1, -x);
    b1 = fun(a1, t);
    bn = b1 + t;
    long long c1 = a1 - b1;
    cout << max(bn, c1) << endl;
  }
  return 0;
}
