#include <bits/stdc++.h>
using namespace std;
long long a[1000000];
int cn;
inline int read() {
  int s = 0, f = 1;
  char ch = getchar();
  while (ch < '0' || ch > '9') {
    if (ch == '-') f = -1;
    ch = getchar();
  }
  while (ch >= '0' && ch <= '9') {
    s = s * 10 + ch - '0';
    ch = getchar();
  }
  return s * f;
}
inline void write(int x) {
  if (x < 0) {
    putchar('-');
    x = -x;
  }
  if (x > 9) write(x / 10);
  putchar(x % 10 + '0');
}
struct lont {
  int M, Len;
  int lv, mv, rv;
  bool pure() const { return mv == Len; }
  lont() {}
  lont(int M, int Len, int lv, int mv, int rv)
      : M(M), Len(Len), lv(lv), mv(mv), rv(rv) {}
};
lont s[10000000];
inline int sin(long long x) {
  if (x < 0)
    return -1;
  else if (x == 0)
    return 0;
  else
    return 1;
}
void push(int n) {
  int ln = n * 2, rn = ln | 1, m = s[n].M;
  s[n].mv = max(s[ln].mv, s[rn].mv);
  if (!a[m] or !a[m + 1] or sin(a[m]) < sin(a[m + 1]))
    s[n].lv = s[ln].lv, s[n].rv = s[rn].rv;
  else {
    s[n].lv = s[ln].pure() ? s[ln].lv + s[rn].lv : s[ln].lv;
    s[n].rv = s[rn].pure() ? s[rn].rv + s[ln].rv : s[rn].rv;
    s[n].mv = max(s[n].mv, s[ln].rv + s[rn].lv);
  }
}
void cheak2(int l, int d) {
  a[l] += d;
  if (sin(a[l]) == sin(a[l] - d))
    return;
  else {
    int x = !!sin(a[l]), k = cn + l;
    s[k] = lont(l, 1, x, x, x);
    while (k >>= 1) push(k);
  }
}
int main() {
  int n = read(), m;
  for (int i = 0; i < n; i++) m = read(), a[i] = m - a[0], a[0] = m;
  a[0] = 0;
  cn = 1;
  int tt;
  while (cn < n + 1) cn *= 2;
  for (int i = n; i < cn; i++) a[i] = 0;
  for (int i = 0, l = cn + i; i < cn; i++, l++)
    tt = !!sin(a[i]), s[l] = lont(i, 1, tt, tt, tt);
  for (int i = cn - 1; i; i--) {
    s[i].M = (s[i * 2].M + s[i * 2 | 1].M) / 2;
    s[i].Len = s[i * 2].Len + s[i * 2 | 1].Len;
    push(i);
  }
  m = read();
  for (int i = 0; i < m; i++) {
    int l = read(), r = read(), d = read();
    if (l ^ 1) cheak2(l - 1, d);
    if (r ^ n) cheak2(r, -d);
    write(s[1].mv + 1);
    putchar('\n');
  }
}
