#include <bits/stdc++.h>
using namespace std;
const int MAX_MEM = (int)1e8;
int mpos = 0;
char mem[MAX_MEM];
inline void *operator new(size_t n) {
  char *res = mem + mpos;
  mpos += n;
  return (void *)res;
}
inline void operator delete(void *) {}
struct __io_dev {
  __io_dev(const bool &__fastio = false) {
    if (__fastio) ios_base::sync_with_stdio(false), cin.tie(nullptr);
    srand(time(nullptr));
    if (!string("").empty())
      freopen(
          ""
          ".in",
          "r", stdin),
          freopen(
              ""
              ".out",
              "w", stdout);
  }
  ~__io_dev() { fprintf(stderr, "%.6f ms\n", 1e3 * clock() / CLOCKS_PER_SEC); }
} __io(false);
const long long inf = (long long)1e+9 + 7ll;
const long long linf = (long long)1e+18 + 7ll;
const long double eps = (long double)1e-9;
const long double pi = acosl((long double)-1.0);
const int alph = 26;
const int maxs = 512l;
static char buff[(int)2e6 + 17];
long long __p[3] = {29ll, 31ll, 33ll};
long long __mod[3] = {inf, inf + 2ll, 14881337ll};
const int maxn = (int)3e5 + 17;
struct item {
  int l, r;
  int ans, ans_pf, ans_sf, pf, sf;
  item() { ans = ans_pf = ans_sf = sf = pf = 1; }
  item(int l, int r) : l(l), r(r) { ans = ans_pf = ans_sf = sf = pf = 1; }
};
int n, q;
long long A[maxn], S[maxn];
item T[4 * maxn];
item merge(item a, item b) {
  item res;
  res.l = a.l, res.r = b.r;
  res.pf = a.pf, res.sf = b.sf;
  res.ans_pf = a.ans_pf, res.ans_sf = b.ans_sf;
  if (a.pf == a.r - a.l + 1 && S[a.r] < 0) res.pf += b.pf;
  if (b.sf == b.r - b.l + 1 && S[a.r] > 0) res.sf += a.sf;
  if (a.ans_pf == a.r - a.l + 1) {
    if (S[a.r] > 0)
      if (a.sf == a.ans_pf) res.ans_pf += b.ans_pf;
    if (S[a.r] < 0) res.ans_pf += b.pf;
  }
  if (b.ans_sf == b.r - b.l + 1) {
    if (S[a.r] > 0) res.ans_sf += a.sf;
    if (S[a.r] < 0)
      if (b.pf == b.ans_sf) res.ans_sf += a.ans_sf;
  }
  res.ans = max({1, a.ans, b.ans, res.ans_pf, res.ans_sf});
  if (S[a.r] > 0) res.ans = max(res.ans, a.sf + b.ans_pf);
  if (S[a.r] < 0) res.ans = max(res.ans, a.ans_sf + b.pf);
  return res;
}
void build(int v = 1, int l = 0, int r = n - 1) {
  if (l == r) return void(T[v] = item(l, l));
  int m = (l + r) / 2;
  build(2 * v, l, m);
  build(2 * v + 1, m + 1, r);
  T[v] = merge(T[2 * v], T[2 * v + 1]);
}
void upd(int i, int v = 1, int l = 0, int r = n - 1) {
  if (l == r) return;
  int m = (l + r) / 2;
  i <= m ? upd(i, 2 * v, l, m) : upd(i, 2 * v + 1, m + 1, r);
  T[v] = merge(T[2 * v], T[2 * v + 1]);
}
int main() {
  scanf("%d", &n);
  for (long long i = 0ll; i < (long long)n; ++i) scanf("%lld", A + i);
  for (long long i = 0ll; i < (long long)n - 1; ++i) S[i] = A[i + 1] - A[i];
  scanf("%d", &q);
  build();
  for (long long ppp = 0ll; ppp < (long long)q; ++ppp) {
    int l, r, d;
    scanf("%d %d %d", &l, &r, &d);
    --l, --r;
    if (l > 0) {
      S[l - 1] += d, upd(l - 1);
    }
    S[r] -= d, upd(r);
    printf("%d\n", T[1].ans);
  }
  return 0;
}
