#include <bits/stdc++.h>
using namespace std;
long long inp[300009];
long long arr[300009];
struct node {
  int si, ei;
  int lf, md, rg;
  node(int sii, int eii, int lff = 0, int mdd = 0, int rgg = 0) {
    si = sii;
    ei = eii;
    lf = lff, rg = rgg, md = mdd;
  }
  node() { si = ei = lf = md = rg = 0; }
};
struct seg_tree {
  node nd[4 * 300009];
  void init(int in, int s, int e) {
    node &n = nd[in];
    if (s == e) {
      arr[s] = inp[s] - inp[s + 1];
      n = node(s, e);
      upd_nd(n, 0);
      return;
    }
    int mid = (s + e) / 2;
    init(2 * in, s, mid);
    init(2 * in + 1, mid + 1, e);
    n = merge(nd[2 * in], nd[2 * in + 1]);
  }
  node merge(node a, node b) {
    int l = a.ei;
    int r = b.si;
    int lf = a.lf;
    int rg = b.rg;
    int md = max(a.md, b.md);
    if (arr[l] == 0 || arr[r] == 0 || (arr[l] > 0 && arr[r] < 0)) {
    } else {
      if (a.md == a.ei - a.si + 1) {
        lf = max(lf, a.md + b.lf);
      }
      if (b.md == b.ei - b.si + 1) {
        rg = max(rg, b.md + a.rg);
      }
      md = max(md, a.rg + b.lf);
    }
    return node(a.si, b.ei, lf, md, rg);
  }
  void upd_nd(node &n, int v) {
    arr[n.si] += v;
    long long x = arr[n.si];
    n.lf = n.md = n.rg = (x != 0);
  }
  node query_r(int in, int s, int e) {
    node &n = nd[in];
    if (n.si == s && n.ei == e) return n;
    int mid = (n.si + n.ei) / 2;
    if (e <= mid)
      return query_r(2 * in, s, e);
    else if (s > mid)
      return query_r(2 * in + 1, s, e);
    else
      return merge(query_r(2 * in, s, mid), query_r(2 * in + 1, mid + 1, e));
  }
  void update_p(int in, int i, int v) {
    node &n = nd[in];
    if (n.si == n.ei) {
      upd_nd(n, v);
      return;
    }
    int mid = (n.si + n.ei) / 2;
    if (i <= mid)
      update_p(2 * in, i, v);
    else
      update_p(2 * in + 1, i, v);
    n = merge(nd[2 * in], nd[2 * in + 1]);
  }
};
seg_tree st;
int main() {
  int n;
  scanf("%d", &n);
  for (int i = 1; i < n + 1; i++) scanf("%lld", &inp[i]);
  int m;
  scanf("%d", &m);
  if (n == 1) {
    for (int i = 0; i < m; i++) {
      printf("%d", 1);
      printf("\n");
    }
    return 0;
  }
  st.init(1, 1, n - 1);
  for (int i = 0; i < m; i++) {
    int l, r, d;
    scanf("%d %d", &l, &r);
    scanf("%d", &d);
    if (l != 1) {
      st.update_p(1, l - 1, -d);
    }
    if (r != n) {
      st.update_p(1, r, d);
    }
    int ans = st.query_r(1, 1, n - 1).md + 1;
    printf("%d", ans);
    printf("\n");
    cout.flush();
  }
}
