#include <bits/stdc++.h>
using namespace std;
long long A[300010], B[300010];
int n, m;
struct node {
  int negpos, negpos_pref, negpos_suf, neg, neg_pref, neg_suf, pos, pos_pref,
      pos_suf, len;
  node() {
    negpos = negpos_pref = negpos_suf = neg = neg_pref = neg_suf = pos =
        pos_pref = pos_suf = 0;
  }
};
node ST[3000010];
void merge(node a, node b, node &x) {
  x.negpos = x.negpos_pref = x.negpos_suf = -0x3f3f3f3f;
  x.neg = x.neg_pref = x.neg_suf = -0x3f3f3f3f;
  x.pos = x.pos_pref = x.pos_suf = -0x3f3f3f3f;
  x.negpos = max(a.negpos, max(b.negpos, a.neg_suf + b.pos_pref));
  x.negpos =
      max(x.negpos, max(a.negpos_suf + b.pos_pref, a.neg_suf + b.negpos_pref));
  x.negpos_pref = a.negpos_pref;
  if (a.neg == a.len) x.negpos_pref = max(x.negpos_pref, a.neg + b.negpos_pref);
  if (a.negpos == a.len)
    x.negpos_pref = max(x.negpos_pref, a.negpos + b.pos_pref);
  x.negpos_suf = b.negpos_suf;
  if (b.pos == b.len) x.negpos_suf = max(x.negpos_suf, a.negpos_suf + b.pos);
  if (b.negpos == b.len) x.negpos_suf = max(x.negpos_suf, a.neg_suf + b.negpos);
  x.pos = a.pos + b.pos;
  x.neg = a.neg + b.neg;
  x.pos_pref = a.pos_pref;
  if (a.pos_pref == a.len) x.pos_pref = a.len + b.pos_pref;
  x.pos_suf = b.pos_suf;
  if (b.pos_suf == b.len) x.pos_suf = a.pos_suf + b.len;
  x.neg_pref = a.neg_pref;
  if (a.neg_pref == a.len) x.neg_pref = a.len + b.neg_pref;
  x.neg_suf = b.neg_suf;
  if (b.neg_suf == b.len) x.neg_suf = a.neg_suf + b.len;
}
void init_node(node &x, long long v) {
  x.negpos = x.negpos_pref = x.negpos_suf = 0;
  x.pos = x.pos_pref = x.pos_suf = 0;
  x.neg = x.neg_pref = x.neg_suf = 0;
  if (v < 0) {
    x.neg = x.neg_pref = x.neg_suf = 1;
  } else if (v > 0) {
    x.pos = x.pos_pref = x.pos_suf = 1;
  }
  if (v) {
    x.negpos = x.negpos_pref = x.negpos_suf = 1;
  }
}
void init(int N, int li, int ls) {
  ST[N].len = (ls - li + 1);
  if (li == ls) {
    init_node(ST[N], B[li]);
  } else {
    int mid = (li + ls) / 2;
    init(2 * N, li, mid);
    init(2 * N + 1, mid + 1, ls);
    merge(ST[2 * N], ST[2 * N + 1], ST[N]);
  }
}
void upd(int N, int li, int ls, int p, long long v) {
  if (p > ls || p < li) return;
  if (li == p && ls == p) {
    B[p] += v;
    init_node(ST[N], B[p]);
    return;
  }
  int mid = (li + ls) / 2;
  upd(2 * N, li, mid, p, v);
  upd(2 * N + 1, mid + 1, ls, p, v);
  merge(ST[2 * N], ST[2 * N + 1], ST[N]);
}
int main() {
  scanf("%d", &n);
  for (int i = 0; i < n; i++) scanf("%lld", &A[i]);
  scanf("%d", &m);
  for (int i = 0; i < n - 1; i++) B[i] = A[i] - A[i + 1];
  n--;
  if (n == 0) {
    while (m--) printf("1\n");
    return 0;
  }
  init(1, 0, n - 1);
  for (int i = 0; i < m; i++) {
    int l, r;
    long long v;
    scanf("%d %d %lld", &l, &r, &v);
    l -= 2;
    r--;
    if (l >= 0 && l < n) upd(1, 0, n - 1, l, -v);
    if (r >= 0 && r < n) upd(1, 0, n - 1, r, v);
    printf("%d\n", ST[1].negpos + 1);
  }
  return 0;
}
