#include <bits/stdc++.h>
using namespace std;
long long a[300005];
int sign(long long x) { return x > 0 ? 1 : -1; }
struct Node {
  int l, r, lx, mx, rx;
  void up(Node L, Node R) {
    lx = L.lx;
    rx = R.rx;
    mx = max(L.mx, R.mx);
    if (a[L.r] && a[R.l] && sign(a[L.r]) >= sign(a[R.l])) {
      mx = max(mx, L.rx + R.lx);
      if (L.mx == L.r - L.l + 1) lx = L.mx + R.lx;
      if (R.mx == R.r - R.l + 1) rx = R.mx + L.rx;
    }
    mx = max({mx, lx, rx});
  }
} seg[300005 * 4];
void update(int qx, int c, int l, int r, int i) {
  seg[i] = {l, r};
  if (l == r) {
    a[qx] += c;
    if (a[qx] != 0)
      seg[i] = {l, r, 1, 1, 1};
    else
      seg[i] = {l, r, 0, 0, 0};
    return;
  }
  int mid = (l + r) / 2;
  if (qx <= mid)
    update(qx, c, l, mid, i * 2);
  else
    update(qx, c, mid + 1, r, i * 2 + 1);
  seg[i].up(seg[i * 2], seg[i * 2 + 1]);
}
int main() {
  int n;
  scanf("%d", &n);
  for (int i = 1; i <= n; ++i) scanf("%I64d", &a[i]);
  for (int i = 1; i < n; ++i) a[i] = a[i + 1] - a[i];
  for (int i = 1; i < n; ++i) update(i, 0, 1, n - 1, 1);
  int Q;
  scanf("%d", &Q);
  while (Q--) {
    int l, r, x;
    scanf("%d%d%d", &l, &r, &x);
    if (l > 1) update(l - 1, x, 1, n - 1, 1);
    if (r < n) update(r, -x, 1, n - 1, 1);
    printf("%d\n", seg[1].mx + 1);
  }
}
