#include <bits/stdc++.h>
using namespace std;
const int maxn = 3e5 + 10;
int n, m;
int rzf[maxn << 2], lzf[maxn << 2], ans[maxn << 2];
long long a[maxn], b[maxn];
int sign(long long x) {
  if (x > 0)
    return 1;
  else if (x < 0)
    return -1;
  return 0;
}
void pushup(int rt, int len, int l, int r) {
  int lenl = (len + 1) / 2, lenr = len / 2;
  int m = (l + r) >> 1;
  bool f = 0;
  if (sign(a[m + 1]) && sign(a[m + 2]) && sign(a[m + 1]) >= sign(a[m + 2]))
    f = 1;
  if (f && lzf[rt << 1] == lenl)
    lzf[rt] = lenl + lzf[rt << 1 | 1];
  else
    lzf[rt] = lzf[rt << 1];
  if (f && rzf[rt << 1 | 1] == lenr)
    rzf[rt] = lenr + rzf[rt << 1];
  else
    rzf[rt] = rzf[rt << 1 | 1];
  ans[rt] = max(ans[rt << 1], ans[rt << 1 | 1]);
  if (f) ans[rt] = max(ans[rt], rzf[rt << 1] + lzf[rt << 1 | 1]);
}
void build(int l, int r, int rt) {
  if (l == r) {
    if (a[l + 1] != 0)
      rzf[rt] = lzf[rt] = ans[rt] = 1;
    else
      rzf[rt] = lzf[rt] = ans[rt] = 0;
    return;
  }
  int m = (l + r) >> 1;
  build(l, m, rt << 1), build(m + 1, r, rt << 1 | 1);
  pushup(rt, r - l + 1, l, r);
}
void upd(int id, long long d, int l, int r, int rt) {
  if (l == r) {
    if (d != 0)
      rzf[rt] = lzf[rt] = ans[rt] = 1;
    else
      rzf[rt] = lzf[rt] = ans[rt] = 0;
    return;
  }
  int m = (l + r) >> 1;
  if (id <= m)
    upd(id, d, l, m, rt << 1);
  else
    upd(id, d, m + 1, r, rt << 1 | 1);
  pushup(rt, r - l + 1, l, r);
}
int main() {
  scanf("%d", &n);
  for (int i = 1; i <= n; i++) {
    scanf("%I64d", &a[i]);
    if (i >= 2) b[i] = a[i] - a[i - 1];
  }
  for (int i = 2; i <= n; i++) a[i] = b[i];
  if (n != 1) build(1, n - 1, 1);
  scanf("%d", &m);
  while (m--) {
    int l, r;
    long long d;
    scanf("%d%d%I64d", &l, &r, &d);
    if (n == 1) {
      printf("1\n");
      continue;
    }
    a[l] += d, a[r + 1] -= d;
    if (l != 1) upd(l - 1, a[l], 1, n - 1, 1);
    if (r != n) upd(r, a[r + 1], 1, n - 1, 1);
    printf("%d\n", ans[1] + 1);
  }
  return 0;
}
